"===============================================================================
"                          __     _____ __  __ ____   ____                      
"                          \ \   / /_ _|  \/  |  _ \ / ___|                     
"                           \ \ / / | || |\/| | |_) | |                         
"                            \ V /  | || |  | |  _ <| |___                      
"       __  ____   __         \_/  |___|_|  |_|_| \_\\____|                     
"      |  \/  \ \ / /+-----------------------------------------+                
"      | |\/| |\ V / |   美妙人生的关键在于你能迷上什么东西!   |                
"      | |  | | | |  +-----------------------------------------+                
"      |_|  |_| |_|      _   ___     _____ __  __ ____   ____                   
"                       | \ | \ \   / /_ _|  \/  |  _ \ / ___|                  
"                       |  \| |\ \ / / | || |\/| | |_) | |                      
"                       | |\  | \ V /  | || |  | |  _ <| |___                   
"                       |_| \_|  \_/  |___|_|  |_|_| \_\\____|                  
"                                                                               
"                              .                                                
"                         /`  O^  //                                            
"                      .  .\. =. ./.  .]`                                       
"                      ,\`  ,``.     ,/.                                        
"                   ..    ,` ,/@@@@O`  ,O@`                                     
"                   .[[` ,. @^/@@O@\,@`                                         
"                        O =@=\  =.@`=@ ]]].                                    
"                   @@`  \  \\,@O/=O.=/                                         
"                        .\  ,\@@@` =O.,\[`                                     
"                     .`   \].   .]O` `                                         
"                    ,[` ,.  .,[[.  ]..@\                                       
"                      .//  .@. =^  ,@. ,.                                      
"                           =/  =O.                     ,]]                     
"                                                 ..   =,@@@@@@]..              
"                                                 =O@\ ^  ,\@@\@@@`.            
"                                                 =@@@*^   . ,=@@@@@]]]]]...    
"                                                 ..\..@      =@@@@@@\oooo\@^   
"                                                   =@\/^    .*@O@@@@@O/oOOo^.  
"                                                 .   ,@@^  .=O\@@@@@@\o\OOo^.  
"                                                      .=.  ..,oOO@@@@@@oOO\^   
"                                                      ,^     *=O@@@@@@@@OOO^   
"                                              .]]  ..,^      .O@@@@@\OoooO@    
"                                               /[[\/@^.,`  .,O@@@@@@@@@@@o/.   
"                                             .=\^./@,^,@...oO@@@@@@/oOOOO@`.   
"                                              @@@/^.,@ =`/O@@@@@@@@@@@@@o^     
"                                           ,/@@\`.,@`=\O@@@@@@@\oOoooOo\`.     
"                                        .=\@\O//,/,/O@@@@@@@@\]O/OOOOO/..      
"                                         .,@@@@@@@@@@@[@O@/\\/OOooO\/..        
"                                       .,@@@@@@//OoOooOooooooOoO\/`.           
"                                       =/..@@@`..,[@@@/,\\@O/\/`.              
"                                           @/         .... [..                 
"===============================================================================
"" 配置文件位置    
"      Linux:   ~/.vimrc
"      MacOS:   ~/.vimrc
"      Windows: ~/_vimrc
"
"" 这个档案的双引号 (") 是批注
"-------------------------------------------------------------------------------
"" 附：vim的 window 和 Linux 的区别    
	"" ------------------------------------------------------------------------
	""                    |                          区       别 
	"" ------------------------------------------------------------------------
	""      系统          |        windows        |        Linux
	"" ------------------------------------------------------------------------
	""      可视块        |        ctrl+q         |       crtl+v
	""                    | 需要按住shift才能     |
	""                    |        选择块         |
	"" ------------------------------------------------------------------------
	"" 注释：由于windows下编程习惯了保存就ctrl+s，在vim下ctrl+s整个putty终端就死了，
	""       原来ctrl+s在LINUX里是锁定屏幕的快捷键，解锁ctrl+q就可以了

" > 参考资料
	" + [vim中文参考手册](http://vimcdoc.sourceforge.net/doc/)
	" + [Vim 教程W3Cschool](https://www.w3cschool.cn/vim/)
	" + [vim简明教程](https://www.cnblogs.com/harry335/p/5886405.html) 
	" + [Vim插件入门](https://www.ituring.com.cn/article/124970)
	" + [来自一个前端开发码农的vim配置方案](https://github.com/qiqiboy/q-vim)
	" + [Vim常用插件说明【没有酷炫，只有接地气】](https://blog.csdn.net/NeptuneYs/article/details/91367776)
	" + [vi与vim如何修改tab为4个空格方法示例](https://zhidao.baidu.com/question/438402597224617964.html)
	" + [neovim 悬浮窗口介绍](https://zhuanlan.zhihu.com/p/60907165)

"-------------------------------------------------------------------------------

"  判断操作系统是否是 Windows 还是 Linux 
	let g:isWindows = 0
	let g:isLinux = 0
	let g:isMacVim = 0
	if(has("win32") || has("win64") || has("win95") || has("win16"))
		let g:isWindows = 1
		" echo "提示:这是windows系统"
		" echom "提示:这是windows系统"
	else
		let g:isLinux = 1
		" echo "提示:这是Linux系统"
		" echom "提示:这是Linux系统"
	endif

	" 判断是否MacVim
	if has("mac")
		let g:isMacVim = 1
		" echo "This is mac."
		" echom "This is mac."
	" else
	"     echo "This is not mac."
	"     echom "This is not mac."
	endif

"  判断是终端还是 Gvim 
	if has("gui_running")
		let g:isGUI = 1
	else
		let g:isGUI = 0
	endif
	
"  判断是vim 还是 nvim 
	let g:isVim = 0
	let g:isNeovim = 0
	if has("nvim")
		let g:isNeovim = 1
		" echo 'isNeovim'
		" echom 'isNeovim'
	else
		let g:isVim = 1
	endif 
"  判断是 是否支持python 

" 使用举例
	" echo isWindows
	" if(isWindows)
	"     echo "isWindows = 1"
	"     " 执行该环境下的配置
	" else
	"     echo "isWindows = 0"
	"     echom "isWindows = 0"
	"     " 执行该环境下的配置
	" endif

" 判断是否是大文件
	" > 参考资料
	" + [如何提高 vim 打开 5G 以上大文件的性能](https://zhidao.baidu.com/question/1579658614753371820.html)
	" + [Linux打开编辑大文件](https://zhuanlan.zhihu.com/p/48787309)
	" + [vim 加载大文件的缓慢的问题](https://blog.csdn.net/LaineGates/article/details/78504884)
	" + [详谈Vim的配置层次结构与插件加载方式（一）](https://blog.csdn.net/qq_27825451/article/details/100518128)
	" + [vim8原生内置(naive)插件安装（二）](https://blog.csdn.net/qq_27825451/article/details/100557133)

	let g:isLargeFile = 0    " 1 代表是大文件标准，0 表示不是大文件标准
	" 设置大文件标准
	" (大于100M)
	" let g:LargeFileSize = 1024 * 1024 * 100
	" (大于10M)
	let g:LargeFileSize = 1024 * 1024 * 10
	" 获取打开文件的大小值

	augroup LargeFile
		:autocmd BufReadPre * let f=getfsize(expand("<afile>")) | if f > g:LargeFileSize || f == -2 | call LargeFile() | else | call NoLargeFile() | endif
	augroup END

	" 当符合大文件标准时
	function LargeFile()
		" no syntax highlighting etc
		set eventignore+=FileType
		" save memory when other file is viewed
		setlocal bufhidden=unload
		" is read-only (write with :w new_filename)
		" setlocal buftype=nowrite
		" no undo possible
		setlocal undolevels=-1
		" echo "The size of this file is ".(getfsize(expand("<afile>"))/ 1024 / 1024) . "MB . It is larger than  " . (g:LargeFileSize / 1024 / 1024) . " MB."
		echom "This file is ".(getfsize(expand("<afile>"))/ 1024 / 1024) . "MB . It is larger than  " . (g:LargeFileSize / 1024 / 1024) . " MB."
		let g:isLargeFile = 1
		" echo "g:isLargeFile = ".g:isLargeFile
		" echom "g:isLargeFile = ".g:isLargeFile
	endfunction

	" 当不符合大文件标准时
	function NoLargeFile()
		echom "The size of this file is ".(getfsize(expand("<afile>"))/ 1024 )." KB."
		let g:isLargeFile = 0
		" echo "g:isLargeFile = ".g:isLargeFile
		" echom "g:isLargeFile = ".g:isLargeFile
		echom " 开启颜色插件"
		" 由于使用Plug插件时使用按需加载，所有要执行两次，一次为加载，一次为启动，
		ColorToggle
		ColorHighlight
		echom " 开启缩进指示插件"
		" 缩进指示线插件(疑似当打开的时大文件时会造成卡住),设置按需打开而非默认加载
		IndentLinesToggle
	endfunction


"==============================================================================
" 自动动作配置

	" 让配置变更立即生效 
	"autocmd BufWritePost $MYVIMRC source $MYVIMRC 

	"启动时默认自动最大化gvim窗口
	" autocmd GUIEnter * simalt ~x

	" 打开自动定位到最后编辑的位置, 需要确认.viminfo当前用户可写
	if has("autocmd")
		au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
	endif

	"关闭最后一个文件编辑buffer窗口时，自动退出其余所有NERDTree、Quickfix窗口
	" autocmd BufEnter * if 0 == len(filter(range(1, winnr('$')), 'empty(getbufvar(winbufnr(v:val), "&bt"))')) | qa! | endif

	"关闭最后一个文件编辑buffer窗口时，打开 vim-project 面板(需要安装amiorin/vim-project插件)
	"autocmd BufEnter * if 0 == len(filter(range(1, winnr('$')), 'empty(getbufvar(winbufnr(v:val), "&bt"))')) | Welcome | endif

	"关闭最后一个文件编辑buffer窗口时，打开 Startify 面板(需要安装mhinz/vim-startify插件)
	" autocmd BufEnter * if 0 == len(filter(range(1, winnr('$')), 'empty(getbufvar(winbufnr(v:val), "&bt"))')) | Startify | endif

	set autochdir     " 自动切换到当前编辑的文件所在路径 (自动切换nerdtree 不会自动切换路劲刷新，可用 NERDTreeFind 快速定位当前文件位置用NETDTree打开)
	" 手动切换到当前选中文件所在目录路径 :cd %:p:h
	
" 打开时文件权限方式（通常，您可以键入视图文件名而不是vim filename，它将以只读模式打开vim）
	"可能存在目录权限位以外的其他目录权限位，例如文件可能被锁定或只读文件系统上。会出现文件锁定情况出现只读情况无法编辑。
	set ro
	":se noro 
	":set noreadonly 
	" [如何清除vim RO标志](http://cn.voidcc.com/question/p-zouwvxdm-bdu.html)
	
" 查找时大小写敏感配置
	set ignorecase                                       " 设置默认进行大小写不敏感查找
	set smartcase                                        " 如果有一个大写字母，则切换到大小写敏感查找


" 配置多语言环境,解决中文乱码问题

	set encoding=utf-8                                   " 内部使用的字符编码方式，包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。
	set fileencoding=utf-8                               " Vim 中当前编辑的文件的字符编码方式，Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
	set fileencodings=utf-8,chinese,gbk,latin1,latin-1   " Vim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式，并且将 fileencoding 设置为最终探测到的字符编码方式。
	"简写
	" set fencs=utf-8,gbk,utf-16,utf-32,ucs-bom            " 编码配置
	set termencoding=utf-8                               " 该选项代表输出到客户终端（Term）采用的编码类型,默认空值，也就是输出到终端时不进行编码转换



	"解决菜单乱码问题
	source $VIMRUNTIME/delmenu.vim
	source $VIMRUNTIME/menu.vim

	language messages zh_CN.utf-8                        " vim提示信息乱码、consle输出乱码问题

	if has("multi_byte")
		" UTF-8 编码
		set encoding=utf-8
		set termencoding=utf-8
		set formatoptions+=mM
		"set fencs=utf-8,gbk
		set fencs=utf-8,gbk,utf-16,utf-32,ucs-bom "编码配置
		if v:lang =~? '^/(zh/)/|/(ja/)/|/(ko/)'
			set ambiwidth=double
		endif
		if has("win32")
			source $VIMRUNTIME/delmenu.vim
			source $VIMRUNTIME/menu.vim
			language messages zh_CN.utf-8
		endif
	else
		echoerr "Sorry, this version of (g)vim was not compiled with +multi_byte"
	endif

" 基础窗口美化设置
	set shortmess=atI              " 启动的时候不显示那个援助索马里儿童的提示`

	set number                     " 可以在每一行的最前面显示行号啦！
	set relativenumber             " 行号以相对行数显示 
	" 让第一次进入文件的时候使用绝对行号，进入编辑模式再退出到normal模式时再显示相对行号
	augroup relative_numbser
		autocmd!
		autocmd WinEnter    * :set relativenumber   " 进入窗口时
		autocmd InsertEnter * :set norelativenumber " 插入模式进入时
		autocmd InsertLeave * :set relativenumber   " 离开插入模式时
		autocmd WinLeave    * :set norelativenumber " 窗口离开时
	augroup END

	" [参考资料 自定义命令 vim 事件](http://vimcdoc.sourceforge.net/doc/autocmd.html)
		" InsertEnter   " 开始插入模式前
		" InsertLeave   " 
		" WinEnter      " 进入其它窗口后
	
	
" 基础高亮配置
	" 延时禁用让Vim查找/替换后一段时间自动取消高亮，发生查找时自动开启
	" 当光标一段时间保持不动了，就禁用高亮
	autocmd cursorhold * set nohlsearch
	" 当输入查找命令时，再启用高亮
	noremap n :set hlsearch<cr>n
	noremap N :set hlsearch<cr>N
	noremap / :set hlsearch<cr>/
	noremap ? :set hlsearch<cr>?
	noremap * *:set hlsearch<cr>

	" 最近行显示高亮配置
	set cursorline      " 高亮最近行
	set nocursorcolumn  " 不高亮最近列
	au WinLeave * set nocursorline nocursorcolumn
	au WinEnter * set cursorline cursorcolumn

	" 查找结果高亮显示设置
	" 更多的CTERM颜色可以查阅：http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim

	" highlight Search ctermbg=yellow ctermfg=black
	" highlight IncSearch ctermbg=black ctermfg=yellow
	" highlight MatchParen cterm=underline ctermbg=NONE ctermfg=NONE

" 光标主题配置
	" 终端下这个和终端的光标设置有关，只要修改了终端中光标的显示，vim自然就修改了。
	
	" Gvim下是可以自定义的光标的形状的，具体的命令是guicursor
	set guicursor=i:ver1  " gui下插入模式光标为竖线
	set gcr=a:block-blinkon10 " 设置光标闪烁 gcr是guicursor 的简写，a 表示所有模式，冒号后面是对百应模式下的行为参数，每个参数用 - 分隔，block 说明用块状光标，blinkon 表示亮起光标时长，时长为零度表示禁用闪烁。也可以是 blinkoff0 或者 blinkwait0
	set list                      " 显示制表格^I、Windows换行符^M,Unix结尾符$ (TAB 键显示为 ^I，而 $显示在每行的结尾)
	set listchars=tab:>-,trail:-   " TAB会被显示成 ">—" 而行尾多余的空白字符显示成 "-"。
	"set nolist                    " 不显示制表格^I、结尾符$
	"set nowrap                    " 不自动换行    dont wrap lines

	" "制表符号高亮
	" highlight tabSpace term=bold ctermbg=green guibg=green
	" autocmd ColorScheme * highlight tabSpace ctermbg=green guibg=green
	" match tabSpace /\v\t+$/

	" "行尾空格高亮
	" highlight extraSpace term=bold ctermbg=yellow guibg=yellow
	" autocmd ColorScheme * highlight extraSpace ctermbg=yellow guibg=yellow
	" 2match extraSpace /\v\ +$/

	" "超长文本高亮
	" " 将一行中超过79个字的部分用蓝色字体高亮显示。
	" highlight rightMargin term=bold ctermfg=blue guifg=blue
	" autocmd ColorScheme * highlight rightMargin ctermbg=blue guibg=blue
	" 3match rightMargin /.\%>79v/
	
	" set columns=79      "  显示时 在79列进行换行展示
	set colorcolumn=79    "  在第79行显示线提示

	set wrap                      " 自动换行    dont wrap lines	
	set ruler           "打开状态栏标尺
	set showmatch       " 高亮匹配的括号

	" 设置当文件被改动时自动载入
	set autoread
	" 在处理未保存或只读文件的时候，弹出确认
	set confirm

" 关闭/开启菜单栏和工具栏
	"set guioptions-=m              " 关闭菜单栏     remove menu bar  
	"set guioptions-=T              " 关闭工具栏     remove toolbar  
	"set guioptions-=r              " 关闭右边滚动栏 remove right-hand scroll bar  
	"set guioptions-=L              " 关闭左边滚动栏 remove left-hand scroll bar
	"set guioptions+=m              " 开启菜单栏     show menu bar  
	"set guioptions+=T              " 开启工具栏     show toolbar  
	"set guioptions+=r              " 开启右边滚动栏 show right-hand scroll bar  
	"set guioptions+=L              " 开启左边滚动栏 show left-hand scroll bar

" 内在记录配置
	" 剪贴板 寄存器设置
	set clipboard^=unnamed,unnamedplus  " 其中unnamed代表*寄存器，unnamedplus代表+寄存器。在mac系统中，两者都一样；一般在linux系统中+和*是不同的，+对应ctrl + c,ctrl + v的桌面系统剪贴板，*对应x桌面系统的剪贴板（用鼠标选择复制，用鼠标中键粘贴）。
	" set clipboard=unnamed "让Vim共享系统剪切板， 就是这个原理：所有删除和拷贝操作默认都会到匿名寄存器(匿名寄存器"")。
		

	set history=1000             " 记录历史条数
	set laststatus=2             " 状态栏行数    use 2 lines for the status bar
	set backspace=2              " 允许将一行退格到上面一行的结尾

	set showcmd                    " 在状态栏显示命令状态    show typed command in status bar
	"set textwidth=79              " 文本宽度
	set wildmenu                   " 打开补全提示窗口（vim默认没打开，neovim默认打开）
	set showtabline=2              " 标签页在窗口上方显示标签栏。=0完全不显示标签栏，=1只有用户新建时才显示，=2总是显示标签栏。
	" set splitright                 " 垂直左右切分窗口时，新窗口在右方
	" set splitbelow                 " 水平上下切分时，新窗口在下方
	set noswapfile                 " 禁止vim产生交换文件
	" set nowrapscan                 " 搜索到文件两端时不重新搜索

	set mouse=a                    " 所有模式下允许使用鼠标 可以在buffer的任何地方使用鼠标（类似office中在工作区双击鼠标定位）

	set noeb                       " 这样当错误发生的时候将不会发出 bi 的一声。（ noeb 是 noerrorbells 的缩写），
	set vb                         " 代替 bell 的将是屏幕的闪烁。（ vb 是 visualbell 的缩写）
	set vb t_vb=                   " 尤其是在跟他人同住（比如学生宿舍）的时候这样的闪烁也会影响别人。
	syntax on                      " 进行语法检验，颜色显示。

	"set report=0                   " 通过使用: commands命令，告诉我们文件的哪一行被改变过
	set fillchars=vert:\ ,stl:\    " 在被分割的窗口间显示空白，便于阅读 ,stlnc:\(加了这个wm分割栏有)

	set scrolloff=3                " 光标移动到buffer的顶部和底部时保持3行距离
	set hidden                     " 允许在有未保存的修改时切换缓冲区
	
	" :browse e -- 会打开一个文件浏览器让你选择要编辑的文件。 
	"    如果是终端中，则会打开netrw的文件浏览窗口； 如果是gvim，则会打开一个图形界面的浏览窗口。 
	"    实际上:browse后可以跟任何编辑文档的命令，如sp等。 用browse打开的起始目录可以由browsedir来设置：
	"set browsedir=last      " 用上次访问过的目录（默认）；
	"set browsedir=buffer    " 用当前文件所在目录；
	set browsedir=current    " 用当前工作目录；

"设置tab键输入变为
	set tabstop=4     " 表示一个 tab 显示出来是多少个空格的长度，默认 8。是實際上讀到檔案的 \t (Tab 字元) 時，要解譯為幾個空白
	set shiftwidth=4  " 表示每一级缩进的长度，一般设置成跟 softtabstop 一样。
	set softtabstop=4 " 在編輯動作 (Backspace) 或是 (Tab) 時，對空白的解譯,修改按 Tab 键的行为，不修改 tab 字符的显示宽度。具体行为跟 tabstop 选项值有关
	"set expandtab    " 将tab转space (实际存起來的文件将会是以空格的编码不是tab的编码 )；即， 把插入的 tab 字符替换成特定数目的空格。具体空格数目跟 tabstop 选项值有关
						" 如果要將既有的 <Tab> 轉成 space 可以再 expandtab 之後輸入:retab!
	set noexpandtab

	set autoindent  " 解释：set autoindent Tab键的宽度 当设置成 expandtab 时，缩进用空格来表示，noexpandtab 则是用制表符表示一个缩进。

	" 带有如下符号的单词不要被换行分割
	set iskeyword+=_,$,@,%,#,-
	" 字符间插入的像素行数目
	set linespace=0

	let python_highlight_all = 1 " 开启对不规范的Python语法的警告提示

	" > 参考资料
	" + [vim中tabstop、shiftwidth、softtabstop以及expandtab的关系](https://blog.csdn.net/chenxiang6891/article/details/41348073)
	" + [vim技巧：详解tabstop、softtabstop、expandtab三个选项的区别](https://segmentfault.com/a/1190000021133524?utm_source=tag-newest)


" 代码折叠相关说明与配置
	"set foldmethod=indent  " 设置成 indent 折叠方式（更多的缩进表示更高级别的折叠）
	"set foldcolumn=3       " 命令定义了左折叠栏的宽度，默认是0。该栏用“|”显示折叠层次。
	"set fdm=indent        "set foldmethod=indent的简写 
	" 确认折叠功能开启:set foldenable
	" ：set fdm?      " 参考当前的折叠模式
		" vim 提供 6中折叠方式(默认省缺下为manual手工定义折叠)
		"    manual            手工定义折叠
		"    indent            更多的缩进表示更高级别的折叠
		"    expr              用表达式来定义折叠
		"    syntax            用语法高亮来定义折叠
		"    diff              对没有更改的文本进行折叠
		"    marker            对文中的标志折叠

		" manual 模式  ( 手工定义折叠 ）它的命令是通用的，掌握了manual的基本命令，折叠也就差不多
			" za    切换折叠状态，
			" zc    关闭折叠，就是折叠起来，
			" zo    打开折叠，
			" zd    删除折叠，当a、c、d、o大写时，则动作是递归的。
			" zf    创建折叠是zf结合光标移动命令（将光标放在函数的开括号上，用zf%，可方便的将函数折起来）。
			" zr    减少折叠 也就是取消折叠吧标志也取消了
			" zm    折叠更多 
			" zM    减少到一个也不剩
			" zm    折叠更多
			" 举例说明：  
				"    把光标置于某一段落内，并命令模式下键入 zfap 你将会看到该段落被一行高亮的文本所代替。你已经创建一个折叠了。 zf 是个操作符，而 ap 是一个文本对象。
				"    你可以将 zf 操作符跟任何一个移动命令联用，为所经之处的文本创建一个折叠。 (如：zf56G，创建从当前行起到56行的代码折叠；)
				"    zf 也能在可视模式下使用。


		" indent 模式  ( 更多的缩进表示更高级别的折叠 ）
			"    zi      打开/关闭折叠
			"    zc      折叠
			"    zC      对所在范围内所有嵌套的折叠点进行折叠
			"    zo      展开折叠
			"    zO      对所在范围内所有嵌套的折叠点展开
			"    [z      到当前打开的折叠的开始处。
			"    ]z      到当前打开的折叠的末尾处。
			"    zj      向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
			"    zk      向上移动到前一折叠的结束处。关闭的折叠也被计入。
			"    注：使用时在缩进处输入命令，缩进处需要四个空格或一个Tab键的长度

		" marker模式    
			"需要用标计来标识代码的折叠，系统默认是{{{和}}}，最好不要改动之
			" zf  创建折叠，比如在marker方式下：
			"        zf56G，创建从当前行起到56行的代码折叠；
			"        10zf或10zf+或zf10↓，创建从当前行起到后10行的代码折叠。
			"        10zf-或zf10↑，创建从当前行起到之前10行的代码折叠。
			"        在括号处zf%，创建从当前行起到对应的匹配的括号上去（（），{}，[]，等）。
			" zd  删除 (delete) 在光标下的折叠。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
			" zD  循环删除 (Delete) 光标下的折叠，即嵌套删除折叠。
			"     仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
			" zE  除去 (Eliminate) 窗口里“所有”的折叠。
			"     仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。

		" vim提供4种缩排，:set indenttype? (查看当前缩排)
		" indenttyep可为:
			" autoindent
			" smartindent
			" cindent
			" indentexpr
			" 其中，autoindent与vi的autoindent类似，smartindent则是对其做了点加强，

	" 注意，每一种折叠方式不兼容，即：你不能用expr又用marker方式。
	" > 参考资料
	" + [Vim 折叠](https://www.jianshu.com/p/16e0b822b682)
	" + [vim 中代码的折叠和打开](https://blog.csdn.net/woshicsdn7547/article/details/45364047)
	" + [vim的折叠、智慧缩排](https://blog.csdn.net/strategycn/article/details/7897895)

	" 多窗口同步滚动
		" 关键命令就是: set scrollbind, 当然这两个窗口都要设置下的，哪几个窗口要同步滚动呢
		" 如果要取消同步滚动，要执行: set noscrollbind

"===============================================================================


" 插件管理工具 vim-plug 
	" > 参考资料
		" + [详谈Vim的配置层次结构与插件加载方式（一）](https://blog.csdn.net/qq_27825451/article/details/100518128)
		" + [vim8原生内置(naive)插件安装（二）](https://blog.csdn.net/qq_27825451/article/details/100557133)
		"+ [VIM 配置](https://www.jianshu.com/p/9536ec0d59a3) 

	" 手动安装
	"   curl -fLo ~/vimfiles/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

	" 自动安装

		let g:isInstallPlug = 0
		let g:myUserPath = '~/.vim/'
		let g:myPlugPath = '~/.vim/plugPluginsFolder'
		let g:myPlugFile = '~/.vim/autoload/plug.vim'
		
		" echom "提示：$Vim        =".$VIM
		" echom "提示：$VIMRUNTIME =".$VIMRUNTIME
		" echom "提示：$HOME       =".$HOME
		
		if(isWindows)
			" 注意：nvim的初始根目录，绿色版是在解压的目录而不是用户根目录 ~ （且 curl 命令 识别不了 ~ 不会切换到 用户根目录）
			if(isVim)
				" 设置加载插件目录
				set rtp+=~/.vim/
				" 设置赋值有差异变量
				let g:myPlugFile = $HOME."\\.vim\\autoload\\plug.vim"
				let g:myPlugPath = $HOME."\\.vim\\plugPluginsFolder"    
				" 启动后自动切换到用户目录下(此处配置用户防止绿色版启动时跑到安装目录)
				execute ":cd  ~"
			else
				" isNeovim
				" 设置加载插件目录
				set rtp+=~/.nvim/
				" 设置赋值有差异变量
				let g:myPlugFile = $HOME."\\.nvim\\autoload\\plug.vim"
				let g:myPlugPath = $HOME."\\.nvim\\plugPluginsFolder"
				" 启动后自动切换到用户目录下(此处配置用户防止绿色版启动时跑到安装目录)
				execute ":cd  ~"
			endif
		else
			" isLinux
			if(isVim)
				" 设置加载插件目录
				set rtp+=~/.vim/
				" 设置赋值有差异变量
				let g:myPlugFile = '~/.vim/autoload/plug.vim'
				let g:myPlugPath = '~/.vim/plugPluginsFolder'
			else
				" 设置加载插件目录set rtp+=~/.config/nvim/
				" 设置赋值有差异变量
				let g:myPlugFile = '~/.config/nvim/autoload/plug.vim'
				let g:myPlugPath = '~/.config/nvim/plugPluginsFolder'
			endif
		endif


		function DownInstallPlug(PlugPathValue)
			" echom "提示：进入DownInstallPlug()函数"
			" echom "提示：PlugPathValue值为".a:PlugPathValue
			" execute "silent !curl -flo ".a:PlugPathValue." --create-dirs  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim"
			execute "!curl -flo ".a:PlugPathValue." --create-dirs  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim"
			" silent !curl -flo ~/.nvim/autoload/plug.vim --create-dirs 
			"                        \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

		endfunction
	
		" echom "提示: myUserPath =".myUserPath
		" echom "提示: myPlugPath =".myPlugPath
		" echom "提示: myPlugFile =".myPlugFile
		" echom "提示: myPlugPathFolder =".myPlugPathFolder
		
		if(!empty(glob(myPlugFile)))
			" echom "提示:".myPlugFile."已经存在。"
			let g:isInstallPlug = 1
		else
			" echom "提示：开始执行下载安装Plug插件"
			"execute :call DownInstallPlug(myPlugFile)
			call DownInstallPlug(myPlugFile) 
			" echom "提示：已经执行完下载plug.vim任务"
		endif
	" 使用
		" :PlugInstall    " 安装
		" :PlugClean      " 清除

	" 配置
		" if(isVim)
		"      " 设置加载插件目录
		"      set rtp+=~/.vim/
		" endif
		" if(isNeovim)
		"      " 设置加载插件目录
		"      set rtp+=~/.nvim/
		" endif
		
		if(isInstallPlug)
			" echo (!empty(glob('~/.vim/plugPluginsFolder')))
			" echo (!empty(glob('~/.nvim/plugPluginsFolder')))
			" if((!empty(glob('~/.vim/plugPluginsFolder'))) 
			"    \ || (!empty(glob('~/.nvim/plugPluginsFolder')))
			"    \ || (!empty(glob('.nvim/plugPluginsFolder')))
			"    \ || (!empty(glob('.vim/plugPluginsFolder')))
			"    \ )
			if((!empty(glob(myPlugPath)))) 
				" echom "提示:已有插件目录,应该不是第一次打开"
			else
				" 第一次打开且没装插件
				" echom "提示:进入时自动安装插件"
				" autocmd vimenter * PlugInstall 
				autocmd vimenter * new | PlugInstall --sync |  q | Startify
			endif
		endif
		
		if(empty(glob(myPlugFile)))
			echom "提示:Plug插件文件没下载完成，并存于对应目录，不加载之后配置。"
			finish   " 没有安装则之后的配置不用再加载
			" 已经安装Plug插件才加载其配置（此处防止没安装Plug时会提示无plug#begin函数的错误提示）
		endif
		
		" if(isInstallPlug)
			" echom "提示:myPlugPath为".myPlugPath
			" echom "提示:myPlugPathFolder为".myPlugPathFolder  
			" call plug#begin('~/.vim/plugPluginsFolder')
			" call plug#begin(myPlugPath)
			call  plug#begin(myPlugPath)

				Plug 'skywind3000/quickmenu.vim'                " 快捷键菜单插件
				Plug 'skywind3000/vim-quickui'                  " 菜单插件
				Plug 'liuchengxu/vim-which-key'                 " 显示按键导航

				Plug 'mhinz/vim-startify'                       " 开始引导页插件


				Plug 'scrooloose/nerdtree',{'on':'NERDTreeToggle'}                     " 目录树插件
				Plug 'mbbill/undotree'                                                 " 撤销更改/撤销树插件 
				Plug 'Xuyuanp/nerdtree-git-plugin',{'on':'NERDTreeTooggle'}            " nerdtree插件扩展-在目录树种显示git不同状态标签插件

				Plug 'ryanoasis/vim-devicons'                   " 给文件加图标美化（需要安装相应字体） 
				" 注：在windos下neovim下有时状态栏的字体图标会错乱，具体原因待查证

				Plug 'tomasr/molokai'                           " molokai主题
				Plug 'yuttie/inkstained-vim'                    " inkstained主题
				if(isVim)
					" Plug 'vim-airline/vim-airline'              " 状态栏美化插件 (neovim也可以用)
					" Plug 'vim-airline/vim-airline-themes'
					Plug 'itchyny/lightline.vim'                " 状态栏(nvim也可用)
					" Plug 'mengelbrecht/lightline-bufferline'    " buffer状态栏
				else
					Plug 'glepnir/spaceline.vim'                    " 状态栏美化插件
					" Plug 'vimoxide/vim-spaceline'                   " 状态栏美化插件
				endif
				
				if(isNeovim)                                    " 另一款状态栏美化插件

					Plug 'maximbaz/lightline-ale'               " 这个插件为lightline vim插件提供ALE指示器。

					Plug 'voldikss/vim-floaterm'                " 浮动终端窗口插件(nevim下体验更好,vim下目前无法悬浮)
					" Plug 'bling/vim-bufferline'                 " 命令行中显示buffer列表
					" Plug 'fholgado/minibufexpl.vim'             " buffer标签名
					" Plug 'zefei/vim-wintabs'                    " 窗口标签插件
					" Plug 'zefei/vim-wintabs-powerline'          " 窗口标签主题插件
					" Plug 'mkitt/tabline.vim'                    " buffer 标签插件
				endif
				" Plug 'cossonleo/dirdiff.nvim'               " 文件夹对比插件

				Plug 'airblade/vim-rooter'                      " 自动切换到项目根目录
				Plug 'airblade/vim-gitgutter'                   " git变化边栏显示插件
				" Plug 'mhinz/vim-signify'                        " git和svn版本变化侧边栏显示插件
				
				Plug 'tpope/vim-fugitive'                       " git命令封装插件
				" Plug 'tpope/vim-git'                            "
				" Plug 'gregsexton/gitv'                          " 展开项目的Git Tree（需要vim-git和vim-fugitive的支持）和GV.vim插件差不多

				Plug 'junegunn/gv.vim',{'on':'GV'}                   " git提交记录树插件
				

				Plug 'majutsushi/tagbar',{'on':'TagbarToggle'}        " (类名、变量、函数)标签列表插件
				Plug 'vim-scripts/taglist.vim',{'on':'Tlist'}        " (类名、变量、函数)标签列表插件
				Plug 'vim-scripts/TaskList.vim',{'on':'TaskList'}    " 当前文件中任务列表插件：列出TODO与FIXME等备注插件


				Plug 'skywind3000/vim-terminal-help'            " vim8.1的终端辅助插件

				Plug 'MattesGroeger/vim-bookmarks'              " 书签可视化管理插件
				Plug 'itchyny/vim-cursorword'                   " 插件可以给当前光标下的单词增加下划线插件 

				Plug 'easymotion/vim-easymotion'                 " 可视区快速移动插件
				" Plug 'justinmk/vim-sneak'                       " 支持多行 f 和F进行跳转（注：vim原始的F、f键位只能快速定位当前行）默认s键与vim的s键有冲突
				" Plug 'haya14busa/incsearch.vim'                 " 增强vim中自带的？和/搜索功能，并支持更加高级的正则表达式匹配，同时高亮所有匹配的字符

				" Plug 'will133/vim-dirdiff',{'on':'DirDiff'}     " 文件夹对比插件

				"另一款 文件夹对比插件
				" Plug 'ZSaberLv0/ZFVimDirDiff'
				" Plug 'ZSaberLv0/ZFVimIgnore' " required only if you want to use default g:ZFDirDiffFileExclude settings
				" Plug 'ZSaberLv0/ZFVimBackup' " required only if you want to enable auto backup


				" Plug 'dkprice/vim-easygrep'                     " vimgrep 文本搜索插件

				Plug 'junegunn/fzf',
				Plug 'junegunn/fzf.vim',                       " 模糊搜索

				Plug 'mileszs/ack.vim',                        " 项目里全局搜索某个单词插件( 比自带的vimgrep快) 【需要安装第三方搜索软件】
				Plug 'jremmen/vim-ripgrep',                    " 同ack一样的文件内容搜索工具插件【需要安装第三方搜索软件】

				Plug 'preservim/nerdcommenter'                  " 代码注释插件
				Plug 'ervandew/supertab'                        " 键入Tab键时具有上下文提示及补全功能

				Plug 'suan/vim-instant-markdown',{'for':'markdown'}                                         " markdown格式高亮插件
				Plug 'dhruvasagar/vim-table-mode',{ 'on': 'TableModeToggle','for':'markdown'}               " markdown自动表格创建与格式化
				" Plug 'iamcco/markdown-preview.nvim',{'for':'markdown'}           " markdown格式浏览器预览插件

				if(isLinux)
					" Plug 'https://github.com/vim-scripts/fcitx.vim.git'
					Plug 'edkolev/tmuxline.vim'                     " Tmux标签状态栏插件
					Plug 'christoomey/vim-tmux-navigator'           " vim + tmux窗格平滑切换插件

					" Plug 'vim-scripts/fcitx.vim'                  " 输入法在不同模式下自动切换
					Plug 'makerj/vim-pdf',{'for':'pdf'}             " pdf文件阅读（需要依赖pdftotext;  archlinux： sudo pacman -S  poppler-data 其他：安装poppler-utils试试）
					Plug 'francoiscabrol/ranger.vim'                " 文件管理器
					Plug 'rbgrouleff/bclose.vim'                    " ranger.vim nvim要求依赖 关闭buf

					Plug 'iberianpig/tig-explorer.vim'              " 将Tig用作git客户端
					" Plug 'izotomas/lazygit-vim'                    " git 命令行客户端插件
	

				endif
				
				Plug 'neoclide/coc.nvim',{'do': {-> coc#util#install()}}             " 新一代补全插件
				" Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} " 新一代补全插件
				

				if(has('python3')) 
					" 需要python3特性执行的插件

					" 片段插件
					Plug 'SirVer/ultisnips'   " 代码片段补全引擎插件（代码片段管理）
					Plug 'honza/vim-snippets' " 代码补全模板

					" 新一代文件目录树插件Defx
					if (isNeovim)
						Plug 'Shougo/defx.nvim', { 'do': ':UpdateRemotePlugins' }
						Plug 'kristijanhusak/defx-icons'            " 文件图标美化
						Plug 'kristijanhusak/defx-git'
					else
						Plug 'Shougo/defx.nvim',
						Plug 'kristijanhusak/defx-icons',             " 文件图标美化
						Plug 'kristijanhusak/defx-git'
						Plug 'roxma/nvim-yarp',
						Plug 'roxma/vim-hug-neovim-rpc',
					endif

					" 模糊搜索插件 Leadf
					"Plug 'Yggdroot/LeaderF',{'on':['LeaderF','LeaderfBufTag','LeaderfBufTagAll']}
					Plug 'Yggdroot/LeaderF'
					
					Plug 'Chiel92/vim-autoformat'                 " 代码格式化/美化插件(需要第三方代码检测依赖)
					
					" " markdown 预览插件
					" Plug 'iamcco/markdown-preview.vim',{'for':'markdown'}      "实时通过浏览器预览 markdown 文件（该插件需要vim 支持py2/py3） 没能预览flow图
					" Plug 'iamcco/mathjax-support-for-mkdp',{'for':'markdown'}  "预览数学公式插件
					

					" 绘图ASCII图

					" ditaa 插件 绘制简单的ASCII图 依赖java的方案 详见 https://pypi.org/project/sphinxcontrib-ditaa/

					" 依赖python的方案
					" Plug 'gyim/vim-boxdraw'   " 绘制简单的ASCII图插件 详见https://github.com/gyim/vim-boxdraw
					" Plug 'vim-scripts/ditaa'  " This plugin is here to help you editing ditaa

					" > 参考资料
					" + [那些年，我追过的绘图工具](https://mp.weixin.qq.com/s?__biz=MzA3NDM0ODQwMw==&mid=203733442&idx=1&sn=720a2ca2c59ea862155b93600b53946c&scene=21#wechat_redirect)

					if(isLinux)
						" Plug 'skywind3000/vim-keysound'  " 打字时播放打字机音效
					endif
				endif

				Plug 'logico/typewriter'  " 打字机主题
				
				Plug 'tpope/vim-surround'                     " 快速环绕插入符号
				Plug 'gcmt/wildfire.vim'                       " 快速选中文本对象（搭配vim-surround使用更搭哦）
				Plug 'junegunn/vim-easy-align'                " 快速跳转到文本位置插件

				Plug 'terryma/vim-smooth-scroll'              " 平滑上下页滚动(原生的没有过渡动画)
			
				Plug 'godlygeek/tabular'                      " 老牌的代码对齐插件
				Plug 'dense-analysis/ale'                     " 异步语法检查与语义错误插件(NeoVim 0.2.0+ and Vim 8) syntax checking and semantic errors
				
				Plug 'itchyny/calendar.vim',{'on':'Calendar'}   " 日历

				" 绘图类相关插件
				Plug 'vim-scripts/DrawIt'        " 字符文本画基本图形工具插件

				" Plug 'wannesm/wmgraphviz.vim'   " 开源的DOT语言绘制绘图工具插件（需要依赖 graphviz）[可以自动布局，尤其适用于复杂的流程图，结构图等等]
				Plug 'liuchengxu/graphviz.vim'   " 开源的DOT语言绘制绘图工具插件（需要依赖 graphviz）[可以自动布局，尤其适用于复杂的流程图，结构图等等]
				" 也可用markdown语法写流程图，甘特图，详细见markdown
				" > 参考资料 
				" + [markdown 画流程图](https://blog.csdn.net/vivian_wanjin/article/details/82699094)
				" + [Markdown画流程图、时序图、甘特图](https://blog.csdn.net/Hiking_Yu/article/details/103943303)
				" + [在Markdown中用mermaid画流程图和ER图](https://blog.csdn.net/weixin_44493841/article/details/100099239?depth_1-utm_source=distribute.wap_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.wap_relevant.none-task-blog-BlogCommendFromBaidu-1)
				" + [Markdown 绘制 UML 图 -- PlantUML + Gravizo](http://www.heqiangfly.com/2017/07/08/development-tool-markdown-plant-uml/)

				" PlantUML 
				" Plug 'weirongxu/plantuml-previewer.vim'    " PlantUML预览插件(需要依赖 Graphviz、PlantUML[PlantUML需要java环境])【有问题无法预览】
				Plug 'tyru/open-browser.vim'               " 打开浏览器阅读插件

				Plug 'scrooloose/vim-slumlord'             " PlantUML预览(依赖PlantUML) 将PlantUML的图像转成字符插入文件的PlantUML代码上方预览 d但是文件需为.uml
				Plug 'aklt/plantuml-syntax'                " PlantUML语法插件

				Plug 'previm/previm'                       " 浏览器预览md文件(markdown预览支持流程图、甘特图)

				" 做数学笔记系列
				Plug 'lervag/vimtex'    " Latex插件（需要依赖 LaTex 和一个pdf阅读器）


				Plug 'lilydjwg/colorizer',{'on':'ColorToggle'}        " 代码颜色显示 (疑似当打开的时大文件时会造成卡住),设置按需打开而非默认加载
				Plug 'Yggdroot/indentLine',{'on':'IndentLinesToggle'}  " 缩进指示线插件(疑似当打开的时大文件时会造成卡住),设置按需打开而非默认加载

				" Plug 'amiorin/vim-project'                      " 工作空间管理（不好用 用vim-startify替代）

				" if(1)
				if(0)
					" vim插件做的游戏
					Plug 'vim-scripts/TeTrIs.vim' " 纯粹的俄罗斯方块游戏
					" https://vim.org/scripts/script.php?script_id=172
					" https://vim.org/scripts/script.php?script_id=1189
					" https://vim.org/scripts/script.php?script_id=3409
					" https://vim.org/scripts/script.php?script_id=5563

					" 调试插件
						" Plug 'Maxlufs/LargeFile.vim'                    " 打开大文件时的插件
						" Plug 'gu-fan/colorv.vim'                        " 代码颜色与调色版
						" Plug 'lfv89/vim-interestingwords'               " 可以使用不同颜色同时高亮多个单词，浏览或者给别人讲解代码的时候比较有用
						" Plug 'terryma/vim-multiple-cursors'          " 多光标输入简化操作插件
						" Plug 'terryma/vim-expend-region'             " 快速选择文本插件
						" Plug 'terryma/vim-smooth-scroll'             " 平滑滚动插件
						" Plug 'tyru/open-browser.vim'    " 快速打开当前行的 url
						" Plug 'chemzqm/vim-easygit'      " 轻量级 git wrapper 插件，拥有所有 fugitive 具有的功能，同时解决其难以扩展的问题
						" Plug 'chemzqm/qdo.vim'          " 用于对 quickfix 搜索结果进行批量替换
						" Plug 'moll/vim-bbye'            " 移除 buffer 同时尽可能保留原有的窗口，方便切换 buffer 的同时保留窗体布局
						" Plug 'chemzqm/system.vim'       " 整合了一些系统相关操作，包括 rm rename mkdir copy to clipboard
						" Plug 'previm/previm'            " 浏览器预览插件

				endif
			call plug#end()
		" endif


" -----------------------------------------------------------------------------
" 主题插件 liuchengxu/vim-which-key  配置

	" 使用
		" 按前缀键可打开弹窗提示相关快捷键提示
		" 基于已经存在的快捷键映射，直接使用一个字符串说明介绍信息即可
		" 不存在相关的快捷键映射，需要用一个 list：
		" :WhichKey! {'a':{'name':'b'}}  " 会打开一个面板，显示a -> b
	" 配置
		" if(isInstallPlug)
			" By default timeoutlen is 1000 ms
			" 默认超时是 1000 ms，如果不想那么长的话，你可以在 vimrc 中设置更短一些
			set timeoutlen=500
			" 注册键位与对应的 dict，这一步比较简单，不要忘记就行。
			"
			" 使用默认<Leader> 前缀键' \'
			
			" 配置使用默认的前缀键'\'唤起导航提示面板
			" Normal模式下\会调出菜单面板
			nnoremap <silent> <Leader> :<c-u>WhichKey '\'<CR>
			" visual模式下\会调出菜单面板
			vnoremap <silent> <Leader> :<c-u>WhichKey '\'<CR>
			call which_key#register('\', "g:which_key_map")
			
			" " 修改前缀键 为空格键
			" let g:mapleader = "\<Space>"
			" " Normal模式下\会调出菜单面板
			" nnoremap <silent> <Leader> :<c-u>WhichKey '<Space>'<CR>
			" " visual模式下\会调出菜单面板
			" vnoremap <silent> <Leader> :<c-u>WhichKey '<Space>'<CR>
			" call which_key#register('<Space>', "g:which_key_map")


			" let g:maplocalleader = ','   "只对某类文件 （如Python文件、HTML文件）而设置的映射。
			" nnoremap <silent> <localleader> :<c-u>WhichKey  ','<CR>

			" Define prefix dictionary
			let g:which_key_map =  {}
			" 注：配置的快捷键配置需要写在此行之后，才会被该插件识别加入到提示面板中
			
			" 引导菜单配置例子
				" let g:which_key_map.f = { 'name' : '+文件' }
				" nnoremap <silent> <Leader>fs :update<CR>
				" let g:which_key_map.f.s = '保存文件'
				"
				" nnoremap <silent> <leader>oq  :copen<CR>
				" nnoremap <silent> <leader>ol  :lopen<CR>
				" let g:which_key_map.o = {
				"       \ 'name' : '+open',
				"       \ 'q' : 'open-quickfix'    ,
				"       \ 'l' : 'open-locationlist',
				"       \ }
				"
				" let g:which_key_map['w'] = {
				"       \ 'name' : '+windows' ,
				"       \ 'w' : ['<C-W>w'     , 'other-window']          ,
				"       \ 'd' : ['<C-W>c'     , 'delete-window']         ,
				"       \ '-' : ['<C-W>s'     , 'split-window-below']    ,
				"       \ '|' : ['<C-W>v'     , 'split-window-right']    ,
				"       \ '2' : ['<C-W>v'     , 'layout-double-columns'] ,
				"       \ 'h' : ['<C-W>h'     , 'window-left']           ,
				"       \ 'j' : ['<C-W>j'     , 'window-below']          ,
				"       \ 'l' : ['<C-W>l'     , 'window-right']          ,
				"       \ 'k' : ['<C-W>k'     , 'window-up']             ,
				"       \ 'H' : ['<C-W>5<'    , 'expand-window-left']    ,
				"       \ 'J' : ['resize +5'  , 'expand-window-below']   ,
				"       \ 'L' : ['<C-W>5>'    , 'expand-window-right']   ,
				"       \ 'K' : ['resize -5'  , 'expand-window-up']      ,
				"       \ '=' : ['<C-W>='     , 'balance-window']        ,
				"       \ 's' : ['<C-W>s'     , 'split-window-below']    ,
				"       \ 'v' : ['<C-W>v'     , 'split-window-below']    ,
				"       \ '?' : ['Windows'    , 'fzf-window']            ,
				"       \ }
			" 快捷键帮助菜单 
				let g:which_key_map.u = { 'name' : '+面板' }
				let g:which_key_map.c = { 'name' : '+注释' }
			" 无跟随功能面板
				" 设置字典数值 
				" let HelpMenuDictionary = {
				"     \  ':NERDTreeToggle':{'name':'打开目录树'},
				"     \  'Alt+=':{'name':'显隐底部终端'},
				"     \  'Alt+q':{'name':'底部终端切换到命令模式'}
				"     \ }
				" 命令模式下输入:WhichKey! HelpMenuDictionary
			" 其他按键也弹提示
				nnoremap <silent> ] :<c-u>WhichKey ']'<CR>
				nnoremap <silent> [ :<c-u>WhichKey '['<CR>
				" nnoremap <silent> b :<c-u>WhichKey 'b'<CR>
				nnoremap <silent> m :<c-u>WhichKey 'm'<CR>
				" nnoremap <silent> g :<c-u>WhichKey 'g'<CR>
				" nnoremap <silent> y :<c-u>WhichKey 'y'<CR>
				" nnoremap <silent> z :<c-u>WhichKey 'z'<CR>
		" endif
	" 参考资料
		" + [Vim 插件: vim-which-key](https://www.jianshu.com/p/e47f7ec27cea)

" -----------------------------------------------------------------------------
" 右侧快捷菜单插件 skywind3000/quickmenu.vim 配置

	" 使用说明

	" 配置
		" if(isInstallPlug)
			" 允许显示命令行帮助（ H ），以及 cursorline （ L ）
			let g:quickmenu_options = "LH"

			" 清除当前目录中所有内容
			call g:quickmenu#reset()

			" 设置 打开：显示 /隐藏 该菜单面板快捷键
			noremap <silent><F12> :call quickmenu#toggle(0)<cr>  " <F12> 键打开
			"noremap <silent><space> :call quickmenu#toggle(0)<cr> " 空格键打开
			" 由井号开始的字符串表示一个分组
			" 分组1 : help 帮助/助记
			call g:quickmenu#append('# Help', '')
			call g:quickmenu#append('打开首页',               ':Startify',               '执行:Startify')
			call g:quickmenu#append('自动换行',               ':set wrap!',              '执行:set wrap! 快捷键 <leader>sw')
			call g:quickmenu#append('制表符换行符显隐',       ':set list!',              '执行:set list! 快捷键 <leader>sl')
			call g:quickmenu#append('目录树NERDTree',         ':NERDTReeToggle',         '执行:NERDTReeToggle')
			call g:quickmenu#append('撤销树Undotree',         ':UndotreeToggle',         '执行:UndotreeToggle')
			call g:quickmenu#append('标签列表Tlist',          ':TlistToggle',            '执行:TlistToggle')
			call g:quickmenu#append('标签列表Tagbar',          ':TagbarToggle',            '执行:TagbarToggle')
			call g:quickmenu#append('任务标签列表Tasklist',   ':TaslistToggle',          '执行:TaslistToggle')
			call g:quickmenu#append('缩进指示线indentLine',   ':IndentLinesToggle',      '执行:IndentLinesToggle')

			call g:quickmenu#append('查看git日志',           ':Glog',    '执行:Glog')
			call g:quickmenu#append('查看git blame',         ':Gblame',  '执行:Gblame')
			call g:quickmenu#append('FZF模糊搜索文件',       ':Files',   '执行:File 或:FZF')
			call g:quickmenu#append('Ack全局搜索关键字',     ':Ack',     '执行:File 或:Rg 关键字')
			call g:quickmenu#append('Ripgrep全局搜索关键字', ':Rg',      '执行:File 或:Rg 关键字')
			call g:quickmenu#append('FireFox预览',           'call OpenFileWithAnotherApp("FireFox")',      '执行:call OpenFileWithAnotherApp("FireFox")')
			if(isWindows)
				call g:quickmenu#append('PowerShell',        'call OpenFolderWithAnotherApp("PowerShell")', '执行:call OpenFolderWithAnotherApp("PowerShell")')
				call g:quickmenu#append('Git-bash',          'call OpenFolderWithAnotherApp("Git-Bash")',   '执行:call OpenFolderWithAnotherApp("Git-Bash")')
				call g:quickmenu#append('Git-gui',           'call OpenFolderWithAnotherApp("Git-Gui")',    '执行:call OpenFolderWithAnotherApp("Git-Gui")')
				call g:quickmenu#append('Chrome预览',        'call OpenFileWithAnotherApp("Chrome")',       '执行:call OpenFileWithAnotherApp("Chrome")')
				call g:quickmenu#append('文件管理器Explorer','call OpenFolderWithAnotherApp("Explorer")',   '执行:call OpenFolderWithAnotherApp("Explorer")')
			endif
			if(isLinux)
				if(isNeovim)
					call g:quickmenu#append('终端图形界面Git管理器Lazygit',              ':!lazygit',                           '执行:!lazygit')
					call g:quickmenu#append('浮动窗口打开 终端图形界面Git管理器Lazygit', ':FloatermNew lazygit',                '执行:FloatermNew lazygit')
				else
					call g:quickmenu#append('终端图形界面Git管理器Lazygit', ':!lazygit',                                        '执行:!lazygit')
				endif
				call g:quickmenu#append('终端文件管理器Ranger',         ':Ranger',                                              '执行:Ranger')
				call g:quickmenu#append('文件管理器Thunar',             'call OpenFolderWithAnotherApp("thunar")',              '执行:call OpenFolderWithAnotherApp("thunar")')
				call g:quickmenu#append('下载工具uGet',                 ':Uget',                                                '执行:call OpenFolderWithAnotherApp("uget")')
				call g:quickmenu#append('网易云音乐',                   'call OpenFolderWithAnotherApp("netease-cloud-music")', '执行:call OpenFolderWithAnotherApp("netease-cloud-music") 或:Ncloudmusic')
			endif
			" 自定义函数
			call g:quickmenu#append('# Other','')
			call g:quickmenu#append('复制当前文件目录地址到剪贴板',   ':call GetCurFilePath()', '执行: call GetCurFilePath()')
			" call g:quickmenu#append('底部打开命令窗口 快捷键Alt+=',   '<A-=>',                  '执行快捷键，或用相关插件的配置Alt+=')
			call g:quickmenu#append('关闭Buff',':bd', '执行:bd')
			call g:quickmenu#append('隐藏Buff窗口',':hide', '执行:hide')
		" endif

	" > 参考资料
		" + [漂亮的 Vim 弹出菜单插件](https://www.v2ex.com/amp/t/376762) 
		" + [skywind3000/quickmenu.vim](https://github.com/skywind3000/quickmenu.vim)

" -----------------------------------------------------------------------------
" 缩进指示线插件 Yggdroot/indentLine 配置 

	" 使用说明
		" 默认Tab键是功能切换键
		" 可以定义一个快捷键
		map <C-i> :IndentLinesToggle<CR>
		" 注：
			" 上边的<C-i>表示Ctrl + i，而:IndentLinesToggle 表示对应的命令。
			" <CR>表示回车。

" -----------------------------------------------------------------------------
" 树形目录插件 scrooloose/nerdtree 配置

	" 使用说明
		"        ?   快速帮助文档
		"        o   打开一个目录或者打开文件，创建的是 buffer，也可以用来打开书签
		"        go  打开一个文件，但是光标仍然留在 NERDTree，创建的是 buffer
		"        t   打开一个文件，创建的是Tab，对书签同样生效
		"        T   打开一个文件，但是光标仍然留在 NERDTree，创建的是 Tab，对书签同样生效
		"        i   水平分割创建文件的窗口，创建的是 buffer
		"        gi  水平分割创建文件的窗口，但是光标仍然留在 NERDTree
		"        s   垂直分割创建文件的窗口，创建的是 buffer
		"        gs  和 gi，go 类似
		"        x   收起当前打开的目录
		"        X   收起所有打开的目录
		"        e   以文件管理的方式打开选中的目录
		"        r   刷新光标所在的目录
		"        R   刷新当前根路径
		"        p   小写，跳转到光标所在的上一级路径
		"        P   大写，跳转到当前根路径
		"        J   到第一个节点
		"        K   到最后一个节点
		"        I   显示隐藏文件
		"        m   显示文件操作菜单
		"        C   将根路径设置为光标所在的目录
		"        u       设置上级目录为根路径
		"        :tabc   关闭当前的 tab
		"        :tabo   关闭所有其他的 tab
		"        :tabp   前一个 tab
		"        :tabn   后一个 tab
		"        gT      前一个 tab
		"        gt      后一个 tab

	" 配置
		" 打开位置居左居右与初始化宽度配置设置（默认居左）
		" let NERDTreeWinPos = 'right'  "居右
		" let NERDTreeWinPos = 'left'   "居左
		" let g:netrw_winsize = 35

		"" 初始化时不打开nerd_tree窗口（默认不打开）
		" let g:nerdtree_tabs_open_on_gui_startup = 1 " 打开
		let g:nerdtree_tabs_open_on_gui_startup = 0   " 不打开

		" 显示行号
		let NERDTreeShowLineNumbers=1
		let NERDTreeAutoCenter=1
		" 是否显示隐藏文件
		let NERDTreeShowHidden=1
		" 设置宽度
		let NERDTreeWinSize=31
		" 在终端启动vim时，共享NERDTree
		let g:nerdtree_tabs_open_on_console_startup=1
		" 忽略一下文件的显示
		let NERDTreeIgnore=['\.pyc','\~$','\.swp']
		" 显示书签列表
		let NERDTreeShowBookmarks=1

		let g:NERDTreeDirArrowExpandable = '▸'
		let g:NERDTreeDirArrowCollapsible = '▾'

		" 开关树形目录的快捷键：
		"map <C-n> :NERDTreeToggle<CR>   " Ctrl + n 开关目录树面板
		"map <F2> :NERDTreeToggle<CR>    " F2 开关目录树面板
		noremap <Leader>ne  :NERDTreeToggle<CR>
		noremap <Leader>nf  :NERDTreeFind<CR>
		noremap <Leader>un  :NERDTreeToggle<CR>
		noremap <Leader>unf :NERDTreeFind<CR>
		let g:which_key_map.n     = { 'name' : '+目录树NERDTree' }
		let g:which_key_map.n.e   = "目录树:NERDTreeToggle"
		let g:which_key_map.n.f   = "快速定位目录树:NERDTreeFind"
		let g:which_key_map.u.n   = "目录树:NERDTreeToggle"
		let g:which_key_map.u.nf = "快速定位目录树:NERDTreeFind"

		" 注：
			" 上边的<C-n>表示Ctrl + n，而:NERDTreeToggle 表示对应的命令。
			" <CR>表示回车。

" -----------------------------------------------------------------------------
" 在 NERDTree 中显示 git 信息插件：nerdtree-git-plugin
	" 使用说明
		" 前提：安装 nerdtree 、需要安装相应字体才能完整使用

	" 配置（需安装相应字体才能完整使用）
		let g:NERDTreeShowIgnoredStatus = 1
		let g:NERDTreeIndicatorMapCustom = {
			\ "Modified"  : "✹",
			\ "Staged"    : "✚",
			\ "Untracked" : "✭",
			\ "Renamed"   : "➜",
			\ "Unmerged"  : "═",
			\ "Deleted"   : "✖",
			\ "Dirty"     : "✗",
			\ "Clean"     : "✔︎",
			\ 'Ignored'   : '☒',
			\ "Unknown"   : "?"
			\ }

" -----------------------------------------------------------------------------
" 标签列表插件 vim-scripts/taglist.vim

	" 使用说明，
		"    最常用的几个命令：
		"     可以用“:TlistOpen”打开taglist窗口，用“:TlistClose”关闭taglist窗口。或者使用“:TlistToggle”在打开和关闭间切换。
		"     :Tlist
		"     Ctrl + ]    " 把光标移到变量名或函数名上，然后按,直接跳到这个变量或函数定义的源文件中
		"     Ctrl+t      " 可以退回原来的地方
		"     Ctrl + o
		"     Ctrl + W W
		"     在taglist窗口中，可以使用下面的快捷键：
		"     <CR>                                   跳到光标下tag所定义的位置，用鼠标双击此tag功能也一样
		"     o                                      在一个新打开的窗口中显示光标下tag
		"     <Space>                                显示光标下tag的原型定义
		"     u                                      更新taglist窗口中的tag
		"     s                                      更改排序方式，在按名字排序和按出现顺序排序间切换
		"     x                                      taglist窗口放大和缩小，方便查看较长的tag
		"     +                                      打开一个折叠，同zo
		"     -                                      将tag折叠起来，同zc
		"     *                                      打开所有的折叠，同zR
		"     =                                      将所有tag折叠起来，同zM
		"     [[                                     跳到前一个文件
		"     ]]                                     跳到后一个文件
		"     q                                      关闭taglist窗口
		"     <F1>                                   显示帮助 
		"      rebuild_ctags                         -重建ctags索引    ctrl+t     ctrl+r      组合键
		"      navigate_to_definition                -跳转到函数定义   ctrl+t     ctrl+t
		"      jump_back                             -跳回             ctrl+t     ctrl+b
		"      jump_back to_last_modification        -跳转到上次修改处 ctrl+t     ctrl+m
		"      show_symbols                          -按函数索引查找   alt+s

	" 配置
		let Tlist_Use_Right_Window=1        "  1让窗口显示在右边，0的话就是显示在左边
		let Tlist_Show_One_File=0           "  让taglist可以同时展示多个文件的函数列表
		let Tlist_File_Fold_Auto_Close=1    "  非当前文件，函数列表折叠隐藏
		let Tlist_Exit_OnlyWindow=1         "  当taglist是最后一个分割窗口时，自动推出vim
		" 使用winmanager时，不使用快捷键
		" nnoremap <silent> <F8> :TlistToggle<CR>
		noremap <Leader>tl :TlistToggle<CR>
		noremap <Leader>ut :TlistToggle<CR>
		let g:which_key_map.u.t = "变量函数树[TagList]:TlistToggle" 
		" 启动Vim后，自动打开taglist窗口。
		" 使用winmanager时，将自动打开窗口关闭
		" let Tlist_Auto_Open = 0

" -----------------------------------------------------------------------------
" 任务列表插件：列出TODO与FIXME等备注插件 vim-scripts/TaskList.vim

	" 使用方法，
		"      在 Normal 模式下，依次按下 , + t + d，任务列表出现在下面的 Preview 窗口中，可以选择对应的条目，按回车键跳转过去
		"      :TaskList

	" 配置
		let g:tlTokenList = ["FIXME","TODO", "HACK", "NOTE", "WARN", "MODIFY"]  " 任务列表搜索的标识符列表，默认是 'FIXME TODO XXX'. 搜索到得结果按照分组和出现顺序排列.
		let g:tlWindowPosition = 1                                              " 指定任务列表窗口打开位置，默认是窗口上方打开，1 窗口上方底部打开
		let g:tlRememberPosition = 1                                            " 默认是找到离光标当前行最近的标示符；如果设置为1，则任务插件下次打开时会恢复到上次关闭时的位置. 

		" 绑定快捷键，默认是 <Leader>t
		"nnoremap    ,td             :TaskList<CR>
		noremap <Leader>ul :TaskList<CR>
		let g:which_key_map.u.n = "任务标签树:TaskList" 


" -----------------------------------------------------------------------------
" 文本搜索插件  dkprice/vim-easygrep  配置

	" 使用说明
		" 快捷键
			" <Leader>vv  - Grep for the word under the cursor, match all occurences,
			"       like |gstar|
			" <Leader>vV  - Grep for the word under the cursor, match whole word, like
			"               |star|
			" <Leader>va  - Like vv, but add to existing list
			" <Leader>vA  - Like vV, but add to existing list
			" <Leader>vr  - Perform a global search on the word under the cursor
			"               and prompt for a pattern with which to replace it.
			" <Leader>vo  - Select the files to search in and set grep options
			" <Leader>vy* - Invoke any option from the options explorer, where * is the
			"               shortcut for that option.
			"               e.g. <Leader>vyr - toggles recursion
			"                    <Leader>vyb - sets buffer grepping mode
			"                    etc.
		" 命令
			" :Grep [arg]
			"     Search for the specified arg, like <Leader>vv.  When an ! is added,
			"     search like <Leader>vV
			" 
			" :GrepAdd [arg]
			"     Search for the specified arg, add to existing file list, as in
			"     <Leader>va.  When an ! is added, search like <Leader>vA
			" 
			" :Replace [target] [replacement]
			"     Perform a global search and replace.  The function searches
			"     the same set of files a grep for the desired target and opens a dialog to
			"     confirm replacement.
			" 
			" :ReplaceUndo
			"     Undoes the last :Replace operation.  Does not stack successive
			"     searches; only the last replace may be undone.  This function may not
			"     work well when edits are made between a call to Replace and a call to
			"     ReplaceUndo.
			" 
			" :GrepOptions
			"     Open a window to set grep options.
			" 
			" :GrepProgram [+arg]
			"     Select a grep program from a list of programs found on your system. An
			"     optional argument may be provided to switch to the program without user
			"     interaction.
			" 
			" :GrepRoot [+arg]
			"     Configure the location that EasyGrep searches from. An optional argument
			"     may be provided to switch to the program without user interaction.
			"     Roots:
			"       1. The current directory. As the current directory changes, the search
			"          location changes automatically.
			"       2. A dynamic directory that easygrep searches for. This is useful for
			"          finding the root of a project with a marker like ".git".
			"       3. A user specified directory. The search location is fixed and does
			"          not change.
			" 
			" :ResultListOpen
			"     Open all files in the result list
			" 
			" :ResultListFilter [+arg]
			"     Filter the result list according to a user pattern, matching either file
			"     or the result list text.
			" 
			" :ResultListDo [+arg]
			"     Perform an action on all entries in the quickfix list

	" 配置

	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------
" 项目里全局搜索某个单词插件  mileszs/ack.vim

	" 使用方法，
		"      :Ack xxx                 在项目里搜索xxx单词.
		"      :Ack! TODO               
		"      :Ack! 'TODO\|FIXME'      

	" 安装前提：需要安装ack
		"    windows: (1)下载并安装 Strawberry Perl 【地址（http://strawberryperl.com/）】
		"             (2). 创建一个目录 c:/tools_bin，并将该目录添加到系统 PATH 环境变量
		"             
		"             (3). 下载 ack 脚本 （http://betterthangrep.com/ack-standalone）
		"                   放到 c:/tools_bin/ack.pl
		"                 
		"             (4). 创建一个批处理文件 c:/tools_bin/ack.bat 内容如下:
		"                   @echo off
		"                   perl.exe c:/tools_bin/ack.pl %*
		"    linux: archlinux安装ack: sudo pacman -S ack
		"
		"    mac:安装ack:brew install ack

		" let g:ackprg="ack// -H// --nocolor// --nogroup"
		" 
		" if executable('ag')
		"  let g:ackprg = 'ag --nogroup --nocolor --column'
		" endif


	" 配置
		" 创建，命令映射
		" :command Todo  Ack! 'TODO\|FIXME\|CHANGED\|BUG\|HACK'   " 此种写法Windows上会报错，目前一次只能匹配搜一个单词
		" :command Debug Ack! 'NOTE\|INFO\|IDEA'                  " 此种写法报错
		:command Todo Ack! TODO

		" 相关高亮配置
		" Vim里面会自动的高亮TODO、FIXME，但是不会高亮CHANGED这样的关键字，所以需要手动的来指定一下
		if has("autocmd")
			" Highlight TODO, FIXME, NOTE, etc.
			if v:version > 701
				autocmd Syntax * call matchadd('Todo', '\W\zs\(TODO\|FIXME\|CHANGED\|BUG\|HACK\)')
				autocmd Syntax * call matchadd('Debug', '\W\zs\(NOTE\|INFO\|IDEA\)')
			endif
		endif

" -----------------------------------------------------------------------------
" 模糊搜索 'junegunn/fzf.vim'、'junegunn/fzf' 

	" 安装前提：需要安装fzf
		"    windows: (1)下载并安装 （如：fzf-0.20.0-windows_amd64.zip）
		"             (2). 解压到一个目录下，如创建一个目录 c:/tools_bin/fzf-20.0-windows_amd64，并将该目录添加到系统 PATH 环境变量
		"             注：fzf对非ansi字符支持得不好，会乱码，window下将终端字符修改为utf-8
		"                临时： chcp 65001 
		"                永久： 1、win+R regedit 进入注册表中
		"                       2、按顺序找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor。
		"                       3、点击右键-新建，选择“字符串值”。
		"                       4、命名为“autorun”, 点击右击修改，数值数据填写“chcp 65001”，确定。
		"    linux: Archlinux安装fzf: sudo pacman -S fzf
		"
		"    mac:安装fzf:brew install fzf
	" 使用
		" :FZF                  当前文件夹文件搜索切换 
		" :Files                当前文件夹文件搜索切换
		" :Buffers              buffer文件搜索切换 
		" :BLines [QUERY]在当前buffer里查找包含某关键词的行
		" :Tags [QUERY]        以Tag查找 (ctags -R)"
		" :Marks
		" :Map                 映射键模糊查找       注 :map  :nmap 原始命令查看 映射配置
		" :Command             命令列表模糊查找     注 :command 查看命令列表
		" ...
	" 配置
		" 查找后按键绑定设置
		" 通过ctrl-t, ctrl-x, ctrl-v来在new tab, new split, new vsplit窗口打开
		let g:fzf_action = {
			\ 'ctrl-t': 'tab split',
			\ 'ctrl-x': 'split',
			\ 'ctrl-v': 'vsplit'
			\ }
		
		" [Buffers] 如果可能跳到已存在窗口
		let g:fzf_buffers_jump = 1
		
		" [[B]Commits] 自定义被'git log'使用的选项
		" let g:fzf_commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"'
		
		" [Tags] 定义用来产生tag的命令
		let g:fzf_tags_command = 'ctags -R'
		
		" [Commands] --expect expression for directly executing the command
		let g:fzf_commands_expect = 'alt-enter,ctrl-x'

		" 面板窗口配置
			" 浮动配置(需要浮动支持 目前vim不支持 neovim支持)
			if (isNeovim)
				" 让输入上方，搜索列表在下方
				let $FZF_DEFAULT_OPTS = '--layout=reverse'

				" 打开 fzf 的方式选择 floating window
				let g:fzf_layout = { 'window': 'call OpenFloatingWin()' }
		
				function! OpenFloatingWin()
					let height = &lines - 3
					let width = float2nr(&columns - (&columns * 2 / 10))
					let col = float2nr((&columns - width) / 2)
		
					" 设置浮动窗口打开的位置，大小等。
					" 这里的大小配置可能不是那么的 flexible 有继续改进的空间
					let opts = {
						\ 'relative': 'editor',
						\ 'row': height * 0.3,
						\ 'col': col + 30,
						\ 'width': width * 2 / 3,
						\ 'height': height / 2
						\ }
		
					let buf = nvim_create_buf(v:false, v:true)
					let win = nvim_open_win(buf, v:true, opts)
		
					" 设置浮动窗口高亮
					call setwinvar(win, '&winhl', 'Normal:Pmenu')
		
					setlocal
						\ buftype=nofile
						\ nobuflisted
						\ bufhidden=hide
						\ nonumber
						\ norelativenumber
						\ signcolumn=no
				endfunction
			endif

		" 与其他软件集成(如ack、Rg/ripgrep)配置
	" 与Rg配合
			let g:rg_command = '
				\ rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --color "always"
				\ -g "*.{js,json,php,md,styl,jade,html,config,py,cpp,c,go,hs,rb,conf}"
				\ -g "!{.git,node_modules,vendor}/*" '
			command! -bang -nargs=* Frg call fzf#vim#grep(g:rg_command .shellescape(<q-args>), 1, <bang>0)
			" 在命令模式下输入: Frg <关键词或空>
		
	" 与Ack配合
			let g:ack_command = 'ack'
			command! -bang -nargs=* Fack call fzf#vim#grep(g:ack_command .shellescape(<q-args>), 1, <bang>0)
			" 在命令模式下输入: Fack <关键词或空>
		
	" 与fd配合
			let g:fd_command = 'fd'
			command! -bang -nargs=* Ffd call fzf#vim#grep(g:fd_command .shellescape(<q-args>), 1, <bang>0)
			" 在命令模式下输入: Ffd <关键词或空>
		
	" >参考资料
		" + [Windows下基于FZF的模糊查找器](https://mounui.com/301.html)
		" + [Github jeesse23/with](https://github.com/jesse23/with)
		" + [VIM与模糊搜索神器FZF的集成用法 - 从简单到高级](https://segmentfault.com/a/1190000016186540?utm_source=tag-newest)
		" + [使用 neovim 的浮动窗口让你再次爱上 fzf](https://blog.csdn.net/simple_the_best/article/details/89279909)
		" + [命令行上的narrowing（随着输入逐步减少备选项）工具](https://www.bbsmax.com/A/Ae5R9XRmJQ/)
		" + [windows系统修改cmd窗口utf-8编码格式](https://jingyan.baidu.com/article/d7130635e8a38413fdf4753b.html)

" -----------------------------------------------------------------------------
" 文件内容搜索 jremmen/vim-ripgrep

	" 安装前提：需要安装ripgrep
		"    windows: (1)下载并安装ripgrep （如：ripgrep-11.0.2-x86_64-pc-windows-msvc.zip）
		"             (2). 解压到一个目录下，如创建一个目录 c:/tools_bin/ripgrep-11.0.2-x86_64-pc-windows-msvc，并将该目录添加到系统 PATH 环境变量
		"                 
		"    linux: Archlinux安装ripgrep: sudo pacman -S ripgrep
		"
		"    mac:安装ripgrep:brew install ripgrep

	" 使用说明
		" :Rg  要查找的字符       
	" 配置

	" 参考资料 

" -----------------------------------------------------------------------------
" 代码注释插件 scrooloose/nerdcommenter

	" 使用方法：
		" # <leader>cc // 注释
		" # <leader>cm 只用一组符号注释
		" # <leader>cA 在行尾添加注释
		" # <leader>c$ /* 注释 */
		" # <leader>cs /* 块注释 */
		" # <leader>cy 注释并复制
		" # <leader>c<space> 注释/取消注释
		" # <leader>ca 切换　// 和 /* */
		" # <leader>cu 取消注释

	" 配置
		" let g:NERDSpaceDelims = 1
		" let g:NERDDefaultAlign = 'left'
		" let g:NERDCustomDelimiters = {
		"             \ 'javascript': { 'left': '//', 'leftAlt': '/**', 'rightAlt': '*/' },
		"             \ 'less': { 'left': '/**', 'right': '*/' }
		"         \ }

		" Add spaces after comment delimiters by default （默认情况下，在注释分隔符后添加空格）
		let g:NERDSpaceDelims = 1

		" Use compact syntax for prettified multi-line comments （对经过修饰的多行注释使用紧凑语法）
		let g:NERDCompactSexyComs = 1

		" Align line-wise comment delimiters flush left instead of following code indentation （按行对齐注释分隔符左对齐，而不是按代码缩进）
		let g:NERDDefaultAlign = 'left'

		" Set a language to use its alternate delimiters by default （将语言设置为默认情况下使用其备用分隔符）
		let g:NERDAltDelims_java = 1

		" Add your own custom formats or override the defaults（添加您自己的自定义格式或覆盖默认格式）
		let g:NERDCustomDelimiters = { 
				\ 'c': { 'left': '/**','right': '*/' },
				\ 'javascript': { 'left': '//', 'leftAlt': '/**', 'rightAlt': '*/' },
				\ 'less': { 'left': '/**', 'right': '*/' },
				\ }

		" Allow commenting and inverting empty lines (useful when commenting a region)(允许注释和反转空行（在注释区域时有用）)
		let g:NERDCommentEmptyLines = 1

		" Enable trimming of trailing whitespace when uncommenting (取消注释时启用尾随空白的修剪)
		let g:NERDTrimTrailingWhitespace = 1

		" Enable NERDCommenterToggle to check all selected lines is commented or not (启用NerdCommentToggle以检查所有选定行是否已注释)
		let g:NERDToggleCheckAllLines = 1

" -----------------------------------------------------------------------------
" 项目管理插件  amiorin/vim-project  配置

	"  使用说明
		"     配置法：在配置文件中增加记录（项目或文件）
		"     命令行下输入
		"     :Welcome                                       " 打开项目列表 即打开欢迎配置
		"     :ProjectPath .                                 " 将当前地址加入到项目列表中（退出gvim 不会保存）
		"     :ProjectPath ~ Home                            " 将家目录备注为 Home加入到项目列表中（退出gvim 不会保存）
		"     :Project 'C:\' ,'C盘'                           " 将家目录备注为 Home加入到项目列表中（退出gvim 不会保存）
		"     :File 'C:\README.txt','C盘自述文件'              " 将文件C:\README.txt目录备注'C盘自述文件加入到项目列表中
		"     :Callback 'C:\README.txt' ,'RemoveTextWidth'   " 用法暂待研究
		" 注：如果对应地址下实际不存在，则不会加到项目列表中

	" 配置
		"set rtp+=~/.vim/bundle/vim-project/

		"let g:project_enable_welcome = 0    " vim开始时就不打开面板页面  即,before call project#rc()
		"let g:project_enable_welcome = 1    " vim开始时就先打开面板页面
		"let g:project_use_nerdtree = 1      " 与NERDTree集成
		"let g:project_use_nerdtree = 0      " 不与NERDTree集成

		" 开启与NERDTree联动使用
		"let g:project_use_nerdtree = 1

		" 自定义开始路径该功能的开始的更目录值
		" call project#rc("~/Code")
		"call project#rc()                  " 默认为家目录 default starting path (the home directory)


		" 创建，命令映射
		":command ProjectList call project#config#welcome()   " 打开项目列表


		" 文件夹地址书签列表
			" 系统配置文件目录
			"Project  'C:\Windows\System32\drivers' ,         'SystemConfig'
			" 当前用户家目录
			"Project  '~' ,                                   'Home'
			" 磁盘列表
			"Project  'C:\' ,                                   'C盘'
			"Project  'D:\' ,                                   'D盘'
			"Project  'E:\' ,                                   'E盘'
			"Project  'F:\' ,                                   'F盘'

		" 文件地址书签列表（注：标签名需要不同，相同只显示最后一个）
			" 公共Vim配置文件
			"File     'C:\Program Files (x86)\Vim\_vimrc' ,   'PublicVimConfigFile'
			" 当前用户Vim配置文件
			"File     '~\_vimrc' ,                             'VimUserConfig'

		" Project  'gollum'
		" File     'gollum/ToDo.md'                       ,   'ToDo'
		" Callback 'gollum'                               ,    'RemoveTextWidth'

		" function! RemoveTextWidth(...) abort
		"   setlocal textwidth=0
		" endfunction
		" function! AddSpecToPath(tile) abort
		"   setlocal path+=spec
		" endfunction

" -----------------------------------------------------------------------------
" 另一款目录书签管理插件 project

" > 参考资料:
" + [士特啰嗦司机 vim project](https://www.cnblogs.com/clphp/p/5473209.html)
" + [vim的项目管理工具：project插件](https://blog.csdn.net/baidu_30000217/article/details/70945965)

" -----------------------------------------------------------------------------
" 撤销更改/撤销树插件  vim-undotree  配置

	" 使用说明
		" 命令模式下输入:UndotreeToggle 打开窗口，可看到当前文件在vim之前的更改记录

	" 打开快捷键设置
	" nnoremap <F3> :UndotreeToggle<CR>       " F3 打开undotree面板
	noremap <Leader>ud :UndotreeToggle<CR>  
	" <Leader>ud 打开undotree面板
	let g:which_key_map.u.d='打开撤销树:UndotreeTooggle'

	"配置undotree产生的文件存放位置设置
	if(isWindows)
		set undodir=$HOME\\.undodir
		set undofile
		if has("persistent_undo")
			set undodir=$HOME\\.undodir
			set undofile
		endif
	else
		set undodir=$HOME/.undodir
		set undofile
		if has("persistent_undo")
			set undodir=$HOME/.undodir
			set undofile
		endif
	endif
	"undotree窗口布局颜样式选择（目前有4种）
	if !exists('g:undotree_WindowLayout')
		let g:undotree_WindowLayout = 3
	endif


" -----------------------------------------------------------------------------
" git变动边沿显示插件 gitgutter  配置
	" 说明
	" 可以显式地关闭和打开vim gitgutter（默认为打开）：
		" 使用：GitGutterDisable关闭
		" 启用：GitGutterEnable
		" 切换方式：GitGutterToggle。

	" 要切换每个缓冲区的vim gitguitter，请执行以下操作：
		" 使用：GitGutterBufferDisable关闭
		" 使用：GitGutterBufferEnable启用
		" 切换方式：GitGutterBufferToggle

	" 您可以打开和关闭标志（默认为打开）：
		" 启用：GitGutterSignsEnable
		" 禁用：GitGutterSignsDisable
		" 切换方式：GitGutterSignsToggle。

	" 并且可以打开和关闭线条突出显示（默认为关闭）：
		" 启用：GitGutterLineHighlightsEnable
		" 禁用：GitGutterLineHighlightsDisable
		" 切换方式：GitGutterLineHighlightsToggle。 

	" 在hunks变化间跳转
		" 跳转到下一个 hunk (change)位置 ]c
		" 跳转到上一个 hunk (change)位置 [c.
		" 自己配置上下调整快捷键方法：如]h [h
				" nmap ]h <Plug>(GitGutterNextHunk)
				" nmap [h <Plug>(GitGutterPrevHunk)    
		" 可以使用：GitGutterQuickFix将所有的hunk加载到quickfix列表中。注意，这会忽略缓冲区中任何未保存的更改。如果设置了选项g:gitguitter_use_location_list，则此命令将把hunk加载到当前窗口的位置列表中。
		"  当光标位于某个块中时，您可以放置或撤消该块：
				" 用<Leader>hs或
				" 用<Leader>hu撤消它。
				" 预览hunk，例如<Leader>hp；
				" 移到预览窗口，例如：wincmd P；

		" 最后，可以使用：GitGutterAll 强制vim gitguitter在所有可见缓冲区中更新其符号。
		" 使用:GitGutterFold命令折叠所有未更改的行，只留下可见的块。使用zr在一个大块上下展开3行上下文。 



	" 配置
		" let g:gitgutter_highlight_lines = 1    " 打开行高亮(所在行整个背景颜色也高亮) turn on line highlighting by default
		let g:gitgutter_highlight_linenrs = 1  " 打开行数高亮 turn on line number highlighting by default
		let g:gitgutter_max_signs = 1000       " 设置最大的更改数（默认值为500）
		" let g:gitgutter_signs = 0
		" let g:gitgutter_map_keys = 0  " 关闭所有的映射按键
		" let g:gitgutter_override_sign_column_highlight = 0
		let g:gitgutter_override_sign_column_highlight = 1
		" let g:gitgutter_preview_win_floating = 1
		" " autocmd BufWritePost * GitGutter
		" nnoremap <LEADER>gf :GitGutterFold<CR>
		" " nnoremap H :GitGutterPreviewHunk<CR>
		" " nnoremap <LEADER>g- :GitGutterPrevHunk<CR>
		" " nnoremap <LEADER>g= :GitGutterNextHunk<CR>
		" set foldtext=gitgutter#fold#foldtext()
		" function! GitStatus()
		"   let [a,m,r] = GitGutterGetHunkSummary()
		"   return printf('+%d ~%d -%d', a, m, r)
		" endfunction
		" set statusline+=%{GitStatus()}

" -----------------------------------------------------------------------------
" git命令封装插件 vim-fugitive  配置

	" 命令映射
		nnoremap <Leader>gs :Gstatus<CR>
		nnoremap <Leader>gd :Gdiff<CR>
		nnoremap <Leader>gv :vertical Gdiff<CR>
		nnoremap <Leader>gw :Gwrite<CR>
		nnoremap <Leader>gc :Gcommit -m""
		nnoremap <Leader>gb :Gblame<CR>
		nnoremap <Leader>gl :Glog
		" nnoremap <Leader>gpu :Gpush<CR>
		nnoremap <Leader>gP :Gpush<CR>
		" nnoremap <Leader>gpl :Gpull<CR>
		nnoremap <Leader>gp :Gpull<CR>

" -----------------------------------------------------------------------------
" 将Tig用作git客户端插件 iberianpig/tig-explorer.vim
	" 依赖：[tig](https://github.com/jonas/tig)
	" 功能简介
		" Vim和Tig之间的无缝切换
		" 在同一个进程中添加缓冲区不是Tig进程的子进程。
		" 从Tig在Vim上的选项卡或垂直/水平拆分窗口中打开文件
		" 基于Tig的动态键图定义
		" 支持Vim8/NeoVim端子
		" 从Tig选择提交时并排打开差异模式
	" 使用说明
		" 以下命令可用于从tig explorer启动的tig(默认配置)
			" e, <Ctrl-o>: edit on existing tab                  在现有选项卡上编辑
			" <Ctrl-t>   : edit on new tab                       在新选项卡上编辑
			" <Ctrl-v>   : edit with vsplit window               使用vsplit窗口编辑
			" <Ctrl-s>   : edit with split window                使用拆分窗口编辑
			" <ESC> o    : open with commit on existing tab      使用现有选项卡上的提交打开
			" <ESC> t    : open with commit on new tab           在新选项卡上用提交打开
			" <ESC> v    : open with commit with vsplit window   使用提交vsplit窗口打开
			" <ESC> s    : open with commit with split window    使用“提交并拆分”窗口打开
		" 当提交可用时（在main、blame、tree、refs视图中），与此提交相对应的文件的版本将被打开，而不是工作目录中的版本。拆分版本将在diff模式下打开两个缓冲区。


	" 配置
		" 默认配置按键
			" let g:tig_explorer_keymap_edit_e  = 'e'
			" let g:tig_explorer_keymap_edit    = '<C-o>'
			" let g:tig_explorer_keymap_tabedit = '<C-t>'
			" let g:tig_explorer_keymap_split   = '<C-s>'
			" let g:tig_explorer_keymap_vsplit  = '<C-v>'
			" let g:tig_explorer_keymap_commit_edit    = '<ESC>o'
			" let g:tig_explorer_keymap_commit_tabedit = '<ESC>t'
			" let g:tig_explorer_keymap_commit_split   = '<ESC>s'
			" let g:tig_explorer_keymap_commit_vsplit  = '<ESC>v'
		" 按键映射
			" open tig with current file      于当前文件打开tig
			" nnoremap <Leader>T :TigOpenCurrentFile<CR>
			" open tig with Project root path 于项目根路径打开tig
			nnoremap <Leader>td :TigOpenProjectRootDir<CR>
			" open tig grep    打开tig grep
			" nnoremap <Leader>g :TigGrep<CR>
			" resume from last grep 从上次grep恢复
			" nnoremap <Leader>r :TigGrepResume<CR>
			" open tig grep with the selected word 用所选单词打开tig grep
			" vnoremap <Leader>g y:TigGrep<Space><C-R>"<CR>
			" open tig grep with the word under the cursor 打开tig grep，光标下有单词
			" nnoremap <Leader>cg :<C-u>:TigGrep<Space><C-R><C-W><CR>
			" open tig blame with current file 当前文件打开tig blame
			nnoremap <Leader>tb :TigBlame<CR>

		" 其他选择
			" 默认情况下，tig浏览器将使用内置终端（如果可用）。要强制作为shell命令启动tig explorer，可以将以下内容添加到~/.vimrc
			" don't use builtin terminal 不要使用内置终端
			let g:tig_explorer_use_builtin_term=0


" -----------------------------------------------------------------------------
" 将Tig用作git客户端插件 iberianpig/tig-explorer.vim
		" nnoremap <C-G> :Lazygit<CR>


" -----------------------------------------------------------------------------
" 状态栏主题插件 airline 配置（nvim中有错乱 所以neovim用另一个状态栏插件）
	" 使用说明
		" 需要安装第三方的字体，默认的字体库有些图标不支持导致乱码

	" 配置
		if(isVim)
			" 设置中文提示
			language messages zh_CN.utf-8 
			" 设置中文帮助
			set helplang=cn
			" 设置为双字宽显示，否则无法完整显示如:☆
			set ambiwidth=double
			" 总是显示状态栏 
			let laststatus = 2
			let g:airline_powerline_fonts = 1   " 使用powerline打过补丁的字体
			let g:airline_theme="dark"          " 设置主题
			" 开启tabline
			"打开tabline功能,方便查看Buffer和切换，这个功能比较不错"
			"还省去了minibufexpl插件，因为我习惯在1个Tab下用多个buffer"
			let g:airline#extensions#tabline#enabled = 1
			"tabline中当前buffer两端的分隔字符
			" let g:airline#extensions#tabline#left_sep = '><'
			" let g:airline#extensions#tabline#left_sep = ''
			"tabline中未激活buffer两端的分隔字符
			" let g:airline#extensions#tabline#left_alt_sep = '》《'
			" let g:airline#extensions#tabline#left_alt_sep = '...'
			"tabline中buffer显示编号
			let g:airline#extensions#tabline#buffer_nr_show = 1      

			" 关闭状态显示空白符号计数,这个对我用处不大"
			"let g:airline#extensions#whitespace#enabled = 0
			"let g:airline#extensions#whitespace#symbol = '!'

			" 设置字体 
			" set guifont=Powerline_Consolas:h14:cANSI     " (Windows系统默认没有安装该字体需要自己下载安装 该字体似乎未支持文件图标)
		endif


" -----------------------------------------------------------------------------
" 状态栏主题插件 'yuttie/inkstained-vim'

	" 配置
		if(isNeovim)
				if !has('gui_running')
				set t_Co=256
				endif 
				let g:lightline = {
				\ 'colorscheme': 'molokai',
				\ 'component': {
				\   'readonly': '%{&readonly?"":""}',
				\ },
				\ 'separator':    { 'left': '', 'right': '' },
				\ 'subseparator': { 'left': '', 'right': '' },
				\ }
			" color inkstained " 搭配主题inkstained的状态栏配置
			" let g:lightline = {
			"    \ 'colorscheme': 'inkstained',
			"    \ 'component': {
			"    \   'readonly': '%{&readonly?"":""}',
			"    \ },
			"    \ 'separator':    { 'left': '', 'right': '' },
			"    \ 'subseparator': { 'left': '', 'right': '' },
			"    \ }
		endif

" -----------------------------------------------------------------------------
" 状态栏 mengelbrecht/lightline-bufferline

		" 配置
		if(isNeovim)
			let g:lightline#bufferline#show_number  = 1
			let g:lightline#bufferline#shorten_path = 0
			let g:lightline#bufferline#unnamed      = '[No Name]'

			" let g:lightline                  = {}
			let g:lightline.tabline          = {'left': [['buffers']], 'right': [['close']]}
			let g:lightline.component_expand = {'buffers': 'lightline#bufferline#buffers'}
			let g:lightline.component_type   = {'buffers': 'tabsel'}
			" let g:lightline.component_raw = {'buffers': 1}
			" autocmd BufWritePost,TextChanged,TextChangedI * call lightline#update()
			" let g:lightline = {
			"       \ 'colorscheme': 'one',
			"       \ 'active': {
			"       \   'left': [ [ 'mode', 'paste' ], [ 'readonly', 'filename', 'modified' ] ]
			"       \ },
			"       \ 'tabline': {
			"       \   'left': [ ['buffers'] ],
			"       \   'right': [ ['close'] ]
			"       \ },
			"       \ 'component_expand': {
			"       \   'buffers': 'lightline#bufferline#buffers'
			"       \ },
			"       \ 'component_type': {
			"       \   'buffers': 'tabsel'
			"       \ }
			"       \ }
			" let g:lightline#bufferline#composed_number_map = {
			"     \ 1:  '⑴ ', 2:  '⑵ ', 3:  '⑶ ', 4:  '⑷ ', 5:  '⑸ ',
			"     \ 6:  '⑹ ', 7:  '⑺ ', 8:  '⑻ ', 9:  '⑼ ', 10: '⑽ ',
			"     \ 11: '⑾ ', 12: '⑿ ', 13: '⒀ ', 14: '⒁ ', 15: '⒂ ',
			"     \ 16: '⒃ ', 17: '⒄ ', 18: '⒅ ', 19: '⒆ ', 20: '⒇ '}

		endif
" -----------------------------------------------------------------------------
" NERDTree美化插件 Nerdtree-devicons

	" 使用说明
		" 需要安装第三方的字体，默认的字体库有些图标不支持导致乱码

	" 配置
		" 设置字体 
		" set guifont=DroidSansMono\ Nerd\ Font\ Mono  " (系统默认没有安装该字体需要自己下载安装)
		"
		"Can be enabled or disabled
		let g:webdevicons_enable_nerdtree = 1

		"whether or not to show the nerdtree brackets around flags
		let g:webdevicons_conceal_nerdtree_brackets = 1

		"adding to vim-airline's tabline
		let g:webdevicons_enable_airline_tabline = 1

		"adding to vim-airline's statusline
		let g:webdevicons_enable_airline_statusline = 1

		function! WebDevIconsGetFileTypeSymbol(...)
			return ''
		endfunction

		let g:WebDevIconsUnicodeDecorateFolderNodes = 1
		let g:DevIconsEnableFoldersOpenClose = 1

		if has('gui_running')
			let g:WebDevIconsNerdTreeAfterGlyphPadding = ''
		endif


" -----------------------------------------------------------------------------
" NERDTree文件的额外语法和突出显示插件(根据文件类型显示不同的图标和颜色) tiagofumo/vim-nerdtree-syntax-highlight'

	" 配置
		" 禁用突出显示
		let g:NERDTreeDisableFileExtensionHighlight = 1
		let g:NERDTreeDisableExactMatchHighlight = 1
		let g:NERDTreeDisablePatternMatchHighlight = 1

		"Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
		let g:NERDTreeFileExtensionHighlightFullName = 1
		let g:NERDTreeExactMatchHighlightFullName = 1
		let g:NERDTreePatternMatchHighlightFullName = 1

		"Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
		let g:NERDTreeHighlightFolders = 1

		"highlights the folder name
		let g:NERDTreeHighlightFoldersFullName = 1


		"let g:NERDTreeDisableFileExtensionHighlight = 1
		"let g:NERDTreeDisableExactMatchHighlight = 1
		"let g:NERDTreeDisablePatternMatchHighlight = 1

		" 使用精确匹配突出显示文件夹
		"let g:NERDTreeFileExtensionHighlightFullName = 1
		"let g:NERDTreeExactMatchHighlightFullName = 1
		"let g:NERDTreePatternMatchHighlightFullName = 1
		"let g:NERDTreeHighlightFolders = 1 " enables folder icon highlighting using exact match
		"let g:NERDTreeHighlightFoldersFullName = 1 " highlights the folder name
		"let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error

		" 自定义颜色
		let s:brown = "905532"
		let s:aqua =  "3AFFDB"
		let s:blue = "689FB6"
		let s:darkBlue = "44788E"
		let s:purple = "834F79"
		let s:lightPurple = "834F79"
		let s:red = "AE403F"
		let s:beige = "F5C06F"
		let s:yellow = "F09F17"
		let s:orange = "D4843E"
		let s:darkOrange = "F16529"
		let s:pink = "CB6F6F"
		let s:salmon = "EE6E73"
		let s:green = "8FAA54"
		let s:Turquoise = "40E0D0"
		let s:lightGreen = "31B53E"
		let s:white = "FFFFFF"
		let s:rspec_red = "FE405F"
		let s:git_orange = "F54D27"
		let s:gray = "808A87"

		let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error
		let g:NERDTreeExtensionHighlightColor['o'] = s:gray " sets the color of o files to blue
		let g:NERDTreeExtensionHighlightColor['h'] = s:blue " sets the color of h files to blue
		let g:NERDTreeExtensionHighlightColor['c'] = s:green " sets the color of c files to blue
		let g:NERDTreeExtensionHighlightColor['cpp'] = s:green " sets the color of cpp files to blue
		let g:NERDTreeExtensionHighlightColor['c++'] = s:green " sets the color of c++ files to blue

	" > 参考资料
		" + [vim-nerdtree-syntax-highlight, nerdtree文件的额外语法和突出显示](https://www.kutu66.com//GitHub/article_146348)
		" + [Vim的NerdTree插件](https://segmentfault.com/a/1190000015143474)
		" + [GVim配置一个漂亮的NerdTree](https://blog.csdn.net/qq_42475711/article/details/96730493)

" -----------------------------------------------------------------------------
" 使键入Tab键时具有上下文提示及补全功能插件  ervandew/supertab 配置
	" 说明
		" :help supertab         " 查看使用说明
		" :scriptnames           " 检查是否加载了supertab
		" :verbose imap <tab>    " 检查插入映射是否存在 与查看映射到的是什么
		" :verbose set paste?    " 确保没有在vimrc或其他地方启用粘贴选项
		" 输入一个或多个字符后按Tab键会有提示出现,在继续按Tab键会向下切换选项（vim  默认是 <C-p>打开，<C-n>向下切换选择）

	" 配置
		let g:SuperTabDefaultCompletionType = "<c-n>"
		let g:SuperTabContextDefaultCompletionType = "<c-n>"

" -----------------------------------------------------------------------------
" 插件  窗口插件管理 vim-script/winmanager  配置

	" 使用说明

	" 配置
		"let g:NERDTree_title='NERD Tree'
		"let g:winManagerWindowLayout='NERDTree|TagList'
		"function! NERDTree_Start()
		"    exec 'NERDTree'
		"endfunction

		"function! NERDTree_IsValid()
		"    return 1
		"endfunction

		" 绑定F3到winmanager
		"nmap <silent> <F3> :WMToggle<CR>
		" 与vim-project有冲突，切打开winmanager时会出现一个空buff
	" > 参考资料
		" + [vim使用winmanager整合nerd tree和taglist](https://www.cnblogs.com/heartchord/p/4912029.html)


" -----------------------------------------------------------------------------
" 平铺式窗口管理插件 spolu/dwm.vim 配置

	" 使用说明
		" Ctrl + n    " 创建一个新窗口并将其放置在主窗格中,并将所有以前的窗口堆叠在堆叠窗格中[S]
		" Ctrl + c    " 如果没有未保存的更改，关闭当前窗口，但不能关闭最后一个窗口
		" Ctrl + J    " 跳到下一个窗口（顺时针）
		" Ctrl + K    " 跳到上一个窗口（逆时针）
		" Ctrl + 空格 “聚焦当前窗口，即将其放置在主窗格中，并将所有其他窗口堆叠在堆叠窗格中

	" 配置
		" set g:dwm_map_keys=0                  " 如果设置为假值，则阻止键映射。
		" set g:dwm_master_pane_width=85        " 设置主窗格的宽度（例如：dwm_master_pane_width=85）

		" 要使用鼠标选择窗口并调整窗格大小，请执行以下操作：
		" set mouse=a                           " 在所有模式下启用鼠标
		" set ttymouse=xterm2                   " 识别xterm2终端类型的鼠标代码

		" set ttymouse=xterm2:识别xterm2终端类型的鼠标代码

	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------
" 插件  mhinz/vim-startify  配置

	" 使用说明

	" 配置
		"设置书签
		if(isWindows)
			if(isVim)
				" let g:startify_bookmarks = [
				"     \ '~/_vimrc',
				"     \ '~/AppData/Local/nvim/init.vim',
				"     \ '~/.SpaceVim.d/init.vim',
				"     \ '~/.SpaceVim.d/autoload/myspacevim.vim',
				"     \]
			else
				" let g:startify_bookmarks = [
				"     \ '~/_vimrc',
				"     \ '~/AppData/Local/nvim/init.vim',
				"     \ '~/.SpaceVim.d/init.vim',
				"     \ '~/.SpaceVim.d/autoload/myspacevim.vim',
				"     \]
			endif
		else
			if(isVim)
				" let g:startify_bookmarks = [
				"     \ '~/.vimrc',
				"     \ '~/.config/nvim/init.vim',
				"     \ '~/.SpaceVim.d/init.vim',
				"     \ '~/.SpaceVim.d/autoload/myspacevim.vim',
				"     \]
			else
				" let g:startify_bookmarks = [
				"     \ '~/.vimrc',
				"     \ '~/.config/nvim/init.vim',
				"     \ '~/.SpaceVim.d/init.vim',
				"     \ '~/.SpaceVim.d/autoload/myspacevim.vim',
				"     \]
			endif
		endif
		"起始页显示的列表长度（是每个类型的数量,非总数）
		let g:startify_files_number = 9

		"自动加载session
		let g:startify_session_autoload = 1

		"过滤列表，支持正则表达式
		let g:startify_skiplist = [
				\ '^/tmp',
				\ ]

		"自定义Header和Footer
		" let g:startify_custom_header = [
		" \'         __  ____   __ __     _____ __  __ ____   ____  ',
		" \'        |  \/  \ \ / / \ \   / /_ _|  \/  |  _ \ / ___| ',
		" \'        | |\/| |\ V /   \ \ / / | || |\/| | |_) | |     ',
		" \'        | |  | | | |     \ V /  | || |  | |  _ <| |___  ',
		" \'        |_|  |_| |_|      \_/  |___|_|  |_|_| \_\\____| ',
		" \]
		" let g:startify_custom_footer = [
		" \'        +---------------------------------------------+ ',
		" \'        |     美妙人生的关键在于你能迷上什么东西!     | ',
		" \'        +--------------------+------------------------+ ',
		" \]

	" > 参考资料
		" + [Vim插件之startify](https://blog.csdn.net/demorngel/article/details/70911385)

" -----------------------------------------------------------------------------
" 书签可视化插件  MattesGroeger/vim-bookmarks  配置

	" 使用说明
		" 功能                                    快捷键          命令
		" 添加/删除书签(当前行)                     mm        :BookmarkToggle
		" 添加/编辑/删除当前行注释书签              mi        :BookmarkAnnotate <TEXT>
		" 跳转到当前 buffer 的下一个书签            mn        :BookmarkNext
		" 跳转到当前 buffer 的前一个书签            mp        :BookmarkPrev
		" 在 quickfix 窗口中列出所有书签(toggle)    ma        :BookmarkShowAll
		" 清除当前 buffer 内的所有书签              mc        :BookmarkClear
		" 清除所有 buffer 内的书签                  mx        :BookmarkClearAll
		" 保存书签到文件                                      :BookmarkSave <FILE_PATH>
		" 从文件加载书签                                      :BookmarkLoad <FILE_PATH>

	" 配置
		highlight BookmarkSign ctermbg=NONE ctermfg=160
		highlight BookmarkLine ctermbg=194 ctermfg=NONE
		let g:bookmark_sign = '♥'                     " 书签符号设置（默认⚑）
		"let g:bookmark_annotation_sign = '##'          " 注释(说明)书签符号(默认☰)
		"let g:bookmark_highlight_lines = 1             " 默认值为0(否)，是否高亮显示书签行
		"let g:bookmark_no_default_key_mappings = 1     " 默认值为0(否)，是否使用默认的快捷键
		let g:bookmark_center = 1                      " 默认值为0(否)，是否跳转后的书签行居中
		let g:bookmark_show_warning = 0                " 默认值为1(是)，删除所有书签时，是否显示警告信息
		let g:bookmark_highlight_lines = 1             " 默认值为0(否)，是否高亮书签行
		let g:bookmark_auto_close = 1                  " 默认值为0(否)，在 quickfix 窗口选中书签后，是否自动关闭 quickfix 窗口
		let g:bookmark_save_per_working_dir = 1        " 默认值为0(否)，是否针对工作目录保存书签
		let g:bookmark_auto_save = 0                   " 默认值为1(是)，是否自动保存书签
		"let g:bookmark_auto_save_file = '/bookmarks'   " 默认值为$HOME .’/.vim-bookmarks’,存储书签的文件(bookmark_save_per_working_dir开启后此配置将被忽略)


	" > 参考资料
		" + [Hacking Vim: bookmarks(06)](https://www.it610.com/article/5490884.htm)

" -----------------------------------------------------------------------------
" vim8.1内置终端辅助插件skywind3000/vim-terminal-help  配置

	" 内置终端也分 normal/insert 两种模式，正常终端操作，输入文字是 insert 模式，在 insert 模式中按 <c-\><c-N> 就可以切换到终端 normal 模式了，然后你可以像 vim buffer 一样正常的 hjkl 漫游，正常的滚屏，复制内容。弄完了以后再按 i/a 回到 insert 模式中接着输入终端命令。

	" 使用说明
		" 第一：提供一个 ALT+= 的快捷键可以像 vscode 的 CTRL+backtick 一样用来打开 /关闭终端窗口，不用每次输入 :terminal，同时新终端会把 shell 的工作目录初始化成你上面正在编辑的文件所在的目录，因为你大部分时候临时想搞点什么一般都是针对你当前正在编辑的文件来操作，那么初始化成当前文件的目录就避免了你每次打开终端再 cd 
		" ALT+= 在正下方打开终端，路径自动帮你定位到上面文件所在目录; 运行完了就再 ALT+= 把它收起来，整个流程十分顺畅。多次 ALT+= 不会无止境的打开新终端，只会复用已有的，而如果你再终端里输入了 exit 结束了 shell 进程，那么再次按 ALT+= 才会创建一个新的终端。

		" 第二：初始化了一组快捷键 ALT+SHIFT+hjkl 用来在终端窗口和其他窗口之间跳转，很多 vim 用户过去都习惯设置 CTRL+hjkl 来做窗口跳转

		" 第三：在终端内提供一个名叫 drop 的命令，当你在终端中突然想编辑某个文件，直接 drop xxx 命令就能通知到外层的 vim 来打开该文件了，，

		" - `ALT` + `=`: 打开内置终端 toggle terminal below.
		" - `ALT` + `SHIFT` + `h`: 移动光标到左边窗口 move to the window on the left.
		" - `ALT` + `SHIFT` + `l`: 移动光标到右边窗口 move to the window on the right.
		" - `ALT` + `SHIFT` + `j`: 移动光标到下方窗口 move to the window below.
		" - `ALT` + `SHIFT` + `k`: 移动光标到上方窗口 move to the window above.
		" - `ALT` + `SHIFT` + `p`: move to the previous window.
		" - `ALT` + `-`: paste register 0 to terminal.
		" - `ALT` + `q`: 切换终端窗口模式 switch to terminal normal mode.

	" 配置
		"let g:terminal_key " 配置默认的切换 terminal 的热键，默认Alt+=  ( ALT+等于号)。
		"let g:terminal_cwd " 配置 shell 启动时候的目录 ;0 是 vim 当前目录 1 是当前编辑文件的所在目录 2 是当前文件的项目目录（包含 .git/.svn 的父目录）

	" > 参考资料
		" + [Vim/NeoVim 内置终端调教记](https://www.v2ex.com/t/637112)

" -----------------------------------------------------------------------------
" 颜色显示插件lilydjwg/colorizer  配置

	" 使用说明
		" :ColorHighlight       " 启动/更新突出显示
		" :ColorClear           " 清除所有亮点
		" :ColorToggle          " 切换高亮

	" 配置
		let g:colorizer_nomap = 1           " 关闭插件默认映射快捷键 <leader> tc映射到ColorToggle
		let g:colorizer_fgcontrast = 0      " 显示设置，默认值为2；0，1 软化前景色，-1 纯色显示
		" let g:colorizer_startup = 0       " 启动时不启用着色

	" > 参考资料
		" + [vim颜色显示插件colorizer](https://mounui.com/229.html)

" -----------------------------------------------------------------------------
" 浮动终端窗口插件voldikss/vim-floaterm 配置

	" 使用说明
		" :FloatermNew       命令打开终端窗口
		" :FloatermToggle    隐藏/重新打开该窗口。终端缓冲区的文件类型设置为floaterm。
		"                    通常，仅一个floaterm实例就足够了。
		"                    如果您打开了多个floaterm实例，它们将附加到一循环双链表。
		"                    然后，您可以使用FloatermNext或 FloatermPrev在它们之间进行切换。

		"  或者可以将其包装到新命令中，如下所示：
		"  :FloatermNew fzf
		"  :FloatermNew ranger
		"  :FloatermNew lazygit

	" 配置
		" 要求：先安装 neovim-remote, pip3 install neovim-remote 若无，则在底部打开窗口

	" > 参考资料
		" + [vim-floaterm 更新介绍](https://zhuanlan.zhihu.com/p/107749687)

" -----------------------------------------------------------------------------
" 终端文件管理插件 francoiscabrol/ranger.vim 配置
	" 使用说明
		" :Ranger                       " open current file by default
		" :RangerCurrentFile            " Default Ranger behaviour
		" :RangerCurrentDirectory
		" :RangerWorkingDirectory
		"
		" " open always in new tabs
		" :RangerNewTab
		" :RangerCurrentFileNewTab
		" :RangerCurrentDirectoryNewTab
		" :RangerWorkingDirectoryNewTab
		"
		" " open tab, when existant or in new tab when not existant
		" :RangerCurrentFileExistingOrNewTab
		" :RangerCurrentDirectoryExistingOrNewTab
		" :RangerWorkingDirectoryExistingOrNewTab
	" 配置
		let g:ranger_map_keys = 0  " 关闭默认快捷键
	" map <leader>f :Ranger<CR> " 插件默认快捷键配置
	
		let g:NERDTreeHijackNetrw = 0  " add this line if you use NERDTree
		let g:ranger_replace_netrw = 1 " open ranger when vim open a directory
		
	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------
" 文件夹对比插件will133/vim-dirdiff

	" 使用说明
		" :DirDiff <dir1> <dir2>
	" 配置

	" > 参考资料
		" + []()
		
" -----------------------------------------------------------------------------
" 文件夹对比插件will133/vim-dirdiff

	" 使用说明
		" :ZFDirDiff <dir1> <dir2>
	" 配置
		" " for core logic:
		let g:ZFDirDiffShowSameFile = 1     " whether to show files that are same
		" let g:ZFDirDiffFileExclude = ''     " file name exclude pattern, e.g. *.class,*.o
		" " it's recommended to use Plug 'ZSaberLv0/ZFVimIgnore' for ignore settings, you may disable this by let g:ZFDirDiffFileExcludeUseDefault=0
		" " function! ZFDirDiffCustomFilter(path, type)
		" "
		" " if you want to supply custom filter logic, define a function named ZFDirDiffCustomFilter before :ZFDirDiff
		" "
		" " function! ZFDirDiffCustomFilter(path, type)
		" "     if match(path, 'xxx') >= 0
		" "         " return 1 to ignore this item
		" "         return 1
		" "     else
		" "         return 0
		" "     endif
		" " endfunction
		" " NOTE: the filter function affects all :ZFDirDiff after defined, you may want to delfunction! ZFDirDiffCustomFilter after :ZFDirDiff call
        "
		" let g:ZFDirDiffContentExclude = ''  " file content exclude pattern, e.g. log:,id:
		" let g:ZFDirDiffFileIgnoreCase = 0   " whether ignore file name case
		" let g:ZFDirDiffCustomDiffArg = ''   " additional diff args passed to diff
		" let g:ZFDirDiffSortFunc = 'ZF_DirDiffSortFunc' " sort function
		" " for builtin UI impl:
		" let g:ZFDirDiffUI_filetypeLeft = 'ZFDirDiffLeft'   " filetype for left diff buffer
		" let g:ZFDirDiffUI_filetypeRight = 'ZFDirDiffRight' " filetype for right diff buffer
		" let g:ZFDirDiffUI_tabstop = 2                      " tabstop for diff buffer
		" let g:ZFDirDiffUI_headerTextFunc = 's:headerText'  " function name to get the header text
        "
		" " return a list of strings
		" " function! YourFunc(isLeft, fileLeft, fileRight)
		" "     return []
		" " endfunction
		" let g:ZFDirDiffUI_autoBackup = 1  "  or let t:ZFDirDiffUI_autoBackup = 1     " whether backup before write or delete files, require ZSaberLv0/ZFVimBackup installed
		" let g:ZFDirDiffUI_syncSameFile = 0      " whether need to sync same file, can be local to tab t:ZFDirDiffUI_syncSameFile
		" " whether confirm before sync (can be local to tab t:xxx)
		" let g:ZFDirDiffConfirmSyncDir = 1
		" let g:ZFDirDiffConfirmSyncFile = 1
		" let g:ZFDirDiffConfirmCopyDir = 1
		" let g:ZFDirDiffConfirmCopyFile = 0
		" let g:ZFDirDiffConfirmRemoveDir = 1
		" let g:ZFDirDiffConfirmRemoveFile = 1
		" " keymaps
		" let g:ZFDirDiffKeymap_update = ['DD']
		" let g:ZFDirDiffKeymap_open = ['<cr>', 'o']
		" let g:ZFDirDiffKeymap_foldOpenAll = ['O']
		" let g:ZFDirDiffKeymap_foldClose = ['x']
		" let g:ZFDirDiffKeymap_foldCloseAll = ['X']
		" let g:ZFDirDiffKeymap_goParent = ['U']
		" let g:ZFDirDiffKeymap_diffThisDir = ['cd']
		" let g:ZFDirDiffKeymap_diffParentDir = ['u']
		" let g:ZFDirDiffKeymap_markToDiff = ['DM']
		" let g:ZFDirDiffKeymap_quit = ['q']
		" let g:ZFDirDiffKeymap_quitFileDiff = ['q']
		" let g:ZFDirDiffKeymap_nextDiff = [']c', 'DJ']
		" let g:ZFDirDiffKeymap_prevDiff = ['[c', 'DK']
		" let g:ZFDirDiffKeymap_syncToHere = ['do', 'DH']
		" let g:ZFDirDiffKeymap_syncToThere = ['dp', 'DL']
		" let g:ZFDirDiffKeymap_deleteFile = ['dd']
		" let g:ZFDirDiffKeymap_getPath = ['p']
		" let g:ZFDirDiffKeymap_getFullPath = ['P']
		" " highlight
		" highlight link ZFDirDiffHL_Title Title
		" highlight link ZFDirDiffHL_Dir Directory
		" highlight link ZFDirDiffHL_Diff DiffText
		" highlight link ZFDirDiffHL_DirOnlyHere DiffAdd
		" highlight link ZFDirDiffHL_DirOnlyThere Normal
		" highlight link ZFDirDiffHL_FileOnlyHere DiffAdd
		" highlight link ZFDirDiffHL_FileOnlyThere Normal
		" highlight link ZFDirDiffHL_ConflictDir ErrorMsg
		" highlight link ZFDirDiffHL_ConflictFile WarningMsg
		" highlight link ZFDirDiffHL_MarkToDiff Cursor
        "
	" > 参考资料
		" + []()
" -----------------------------------------------------------------------------
" git提交记录树插件 junegunn/gv.vim    配置

	" 使用说明
		" Usage
		" Commands
		" :GV to open commit browser
		" You can pass git log options to the command, e.g. :GV -S foobar.
		" :GV! will only list commits that affected the current file
		" :GV? fills the location list with the revisions of the current file
		" :GV or :GV? can be used in visual mode to track the changes in the selected lines.
		" 
		" Mappings
		" o or <cr> on a commit to display the content of it
		" o or <cr> on commits to display the diff in the range
		" O opens a new tab instead
		" gb for :Gbrowse
		" ]] and [[ to move between commits
		" . to start command-line with :Git [CURSOR] SHA à la fugitive
		" q or gq to close

	" 配置

	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------
" 插件可以给当前光标下的单词增加下划线插件 itchyny/vim-cursorword 

	" 使用说明

	" 配置

	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------
" 可以使用不同颜色同时高亮多个单词，浏览或者给别人讲解代码的时候比较有用 lfv89/vim-interestingwords

	" 使用说明

	" 配置

	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------
"可视区快速搜索移动插件 easymotion/vim-easymotion
	" 使用说明
		" 使用下面配置的快捷键打开后 输入相应的可视区内相应字符会高亮  
	" 配置
		" 配置启动快捷键 
		nmap ss <Plug>(easymotion-s2)

	" > 参考资料
		" + []()


" -----------------------------------------------------------------------------
" 新一代文件目录插件 Shougo/Defx （需要python3特性支持） 

	" 使用说明
		" defx需要Python3.6.1+和Neovim（0.3.0+）或Vim8.1+
		" 如果：echo has（"python3"）返回1，则支持python3；否则，请参见下文。
			" 您可以使用pip启用Python3接口
			"    pip3 install --user pynvim
			" 如果Defx是在Python支持被添加到Neovim之前安装的，那么：UpdateRemotePlugins应该手动执行。
	  		

			" l       键来打开关闭文件或者文件夹
			" 快捷键如下
	  			" .       显示和隐藏忽略文件，
	  			" x       关闭文件夹
	  			" h       关闭文件夹
	  			" j       上移
	  			" k       下移
	  			" l       文件夹则展开，文件则打开
	  			" o       文件夹则展开，文件则打开
	  			" I       split 分屏打开
	  			" m       移动
	  			" c       拷贝
	  			" p       粘贴 移动或拷贝的
	  			" r       重命名
	  			" shift-k 在当前光标下新建文件夹
	  			" shift-n 在当前光标下新建文件
	  			" shift_c 切换样式
	  			" d       删除光标所在的文件或文件夹
	  			" yy      输出当前光标所在的路径
	" 配置
		if has("python3")
			" 窗口位置设置
			call defx#custom#option('_', {
				\ 'winwidth': 30,
				\ 'split': 'vertical',
				\ 'direction': 'topleft',
				\ 'show_ignored_files': 0,
				\ 'buffer_name': '',
				\ 'toggle': 1,
				\ 'resume': 1
				\ })

			autocmd FileType defx call s:defx_my_settings()
			function! s:defx_my_settings() abort
			  " Define mappings
			  nnoremap <silent><buffer><expr> <CR> defx#do_action('open')
			  nnoremap <silent><buffer><expr> c    defx#do_action('copy')
			  nnoremap <silent><buffer><expr> m    defx#do_action('move')
			  nnoremap <silent><buffer><expr> p    defx#do_action('paste')
			  " nnoremap <silent><buffer><expr> l  defx#do_action('open')
			  nnoremap <silent><buffer><expr> l     <SID>defx_toggle_tree()                    " 打开或者关闭文件夹，文件

			  nnoremap <silent><buffer><expr> E    defx#do_action('open', 'vsplit')
			  nnoremap <silent><buffer><expr> P    defx#do_action('preview')
			  "nnoremap <silent><buffer><expr> o    defx#do_action('open_tree', 'toggle')
			  nnoremap <silent><buffer><expr> K    defx#do_action('new_directory')
			  nnoremap <silent><buffer><expr> N    defx#do_action('new_file')
			  nnoremap <silent><buffer><expr> M    defx#do_action('new_multiple_files')
			  "nnoremap <silent><buffer><expr> C    defx#do_action('toggle_columns',
			                                           \ 'mark:indent:icon:filename:type:size:time')
			  nnoremap <silent><buffer><expr> S    defx#do_action('toggle_sort', 'time')
			  "nnoremap <silent><buffer><expr> d    defx#do_action('remove')
			  nnoremap <silent><buffer><expr> r    defx#do_action('rename')
			  nnoremap <silent><buffer><expr> !    defx#do_action('execute_command')
			  nnoremap <silent><buffer><expr> x    defx#do_action('execute_system')
			  nnoremap <silent><buffer><expr> yy   defx#do_action('yank_path')
			  nnoremap <silent><buffer><expr> .    defx#do_action('toggle_ignored_files')
			  nnoremap <silent><buffer><expr> ;    defx#do_action('repeat')
			  nnoremap <silent><buffer><expr> h    defx#do_action('cd', ['..'])
			  nnoremap <silent><buffer><expr> ~    defx#do_action('cd')
			  nnoremap <silent><buffer><expr> q    defx#do_action('quit')
			  nnoremap <silent><buffer><expr> <Space>  defx#do_action('toggle_select') . 'j'
			  nnoremap <silent><buffer><expr> *    defx#do_action('toggle_select_all')
			  nnoremap <silent><buffer><expr> j    line('.') == line('$') ? 'gg' : 'j'
			  nnoremap <silent><buffer><expr> k    line('.') == 1 ? 'G' : 'k'
			  nnoremap <silent><buffer><expr> <C-l> defx#do_action('redraw')
			  nnoremap <silent><buffer><expr> <C-g> defx#do_action('print')
			  nnoremap <silent><buffer><expr> cd    defx#do_action('change_vim_cwd')
			endfunction
			function! s:defx_toggle_tree() abort
				" Open current file, or toggle directory expand/collapse
				if defx#is_directory()
					return defx#do_action('open_or_close_tree')
				endif
				return defx#do_action('multi', ['drop'])
			endfunction
		endif
	" > 参考资料
		" + [vim defx 可用配置-searchtag:defx001](https://zhuanlan.zhihu.com/p/88329719)

" -----------------------------------------------------------------------------
" 文件目录Defx插件  kristijanhusak/defx-icons （需要python3特性支持） 

	let g:defx_icons_enable_syntax_highlight = 1
	let g:defx_icons_column_length = 1
	let g:defx_icons_directory_icon = ''
	let g:defx_icons_mark_icon = '*'
	let g:defx_icons_copy_icon = ''
	let g:defx_icons_link_icon = ''
	let g:defx_icons_move_icon = ''
	let g:defx_icons_parent_icon = ''
	let g:defx_icons_default_icon = ''
	let g:defx_icons_directory_symlink_icon = ''
	" Options below are applicable only when using "tree" feature
	let g:defx_icons_root_opened_tree_icon = ''
	let g:defx_icons_nested_opened_tree_icon = ''
	let g:defx_icons_nested_closed_tree_icon = ''


" -----------------------------------------------------------------------------
" Defx文件目录git插件 kristijanhusak/defx-git （需要python3特性支持） 
	" 使用说明
		" defx需要Python3.6.1+和Neovim（0.3.0+）或Vim8.1+

	" 配置
		if has("python3")
			call defx#custom#column('git', 'indicators', {
			  \ 'Modified'  : '✹',
			  \ 'Staged'    : '✚',
			  \ 'Untracked' : '✭',
			  \ 'Renamed'   : '➜',
			  \ 'Unmerged'  : '═',
			  \ 'Ignored'   : '☒',
			  \ 'Deleted'   : '✖',
			  \ 'Unknown'   : '?'
			  \ })

			" call defx#custom#column('git', 'column_length', 1)
			" call defx#custom#column('git', 'show_ignored', 1)

			" 热键设置
			" 	- <Plug>(defx-git-next)     - 转到具有git状态的下一个文件
			" 	- <Plug>(defx-git-prev)     - 转到具有git状态的前一个文件
			" 	- <Plug>(defx-git-stage)    - 在光标下分阶段文件/目录
			" 	- <Plug>(defx-git-reset)    - 在光标下卸下文件/目录
			" 	- <Plug>(defx-git-discard)  - 在光标下丢弃对文件/目录的所有更改
			nnoremap <buffer><silent> [c <Plug>(defx-git-prev)
			nnoremap <buffer><silent> ]c <Plug>(defx-git-next)
			nnoremap <buffer><silent> ]a <Plug>(defx-git-stage)
			nnoremap <buffer><silent> ]r <Plug>(defx-git-reset)
			nnoremap <buffer><silent> ]d <Plug>(defx-git-discard)

		endif

	" > 参考资料


" -----------------------------------------------------------------------------
" 模糊搜索插件 'Yggdroot/LeaderF' （需要python3特性支持）

	" 使用说明
		" 检索文件：<leader>f
		" 检索 buffer：<leader>b
		" 在 LeaderF 运行起来以后（在正常检索的模式下），可以执行下面的一些操作：
		" <C-C>, <ESC> : 退出 LeaderF. 
		" <C-R> : 在模糊匹配和正则式匹配之间切换
		" <C-F> : 在全路径搜索和名字搜索之间切换
		" <Tab> : 在检索模式和选择模式之间切换
		" <C-J>, <C-K> : 在结果列表里选择
		" <C-X> : 在水平窗口打开
		" <C-]> : 在垂直窗口打开
		" <C-T> : 在新标签打开
		" <C-P> : 预览结果
		" 在 LeaderF 检索文件的模式下，如果按 Tab 进入选择列表之后，会有其他的快捷键，可以通过 F1 来查看
	" 配置
		if has("python3")
			"
		endif

	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------
" 创建markdown的表格创建插件 dhruvasagar/vim-table-mode 配置

	" 使用说明
		" Plug 'dhruvasagar/vim-table-mode', { 'on': 'TableModeToggle' }
		" 1、首先启动插件 :TableModeToggle
		" 2、在插入模式下，输入一个|，再输入列名，再输入另一个|，此时vim-table-mode会自动进行格式化
		" 3、在第二行（无需离开插入模式），输入两次。插件会自动创建一条水平线
		" 4、输入内容时，每次输入|后，插件就会自动依据表格内容大小自动调整格式
		" 5、表格完成后，就可以禁止插件功能 :TableModeDisable,

	" 配置
		" 配置快捷键
		" nnoremap <Leader>tm :TableModeToggle<CR>
		" markdown-compatible tables
		let g:table_mode_corner='|'

		function! s:isAtStartOfLine(mapping)
			let text_before_cursor = getline('.')[0 : col('.')-1]
			let mapping_pattern = '\V' . escape(a:mapping, '\')
			let comment_pattern = '\V' . escape(substitute(&l:commentstring, '%s.*$', '', ''), '\')
			return (text_before_cursor =~? '^' . ('\v(' . comment_pattern . '\v)?') . '\s*\v' . mapping_pattern . '\v$')
		endfunction
		" 插入模式下，按 || 使能插件
		inoreabbrev <expr> <bar><bar>
					\ <SID>isAtStartOfLine('\|\|') ?
					\ '<c-o>:TableModeEnable<cr><bar><space><bar><left><left>' : '<bar><bar>'
		" 插入模式下，按 __ 失能插件
		inoreabbrev <expr> __
					\ <SID>isAtStartOfLine('__') ?
					\ '<c-o>:silent! TableModeDisable<cr>' : '__'


	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------
" 画图工具插件  vim-scripts/DrawIt  配置

	" 使用说明
		" 在命令模式下输入\di，开启drawit(或者执行:DIstart)
		" 然后输入上下左右键就可以看到效果了
		" 要结束drawit模式，键入\di，或者:DIstop
		" 在命令模式下使用：
		" \di                    #开启DrawIt
		" \ds                    #关闭DrawIt
		"
		" 在开启DrawIt下使用下列操作进行基本图形绘制：
			" <left>       向左移动并绘制
			" <right>      向右移动并绘制，根据需要插入行/ 或空格
			" <up>         移动并绘制，根据需要插入行/空格
			" <down>       移动并向下绘制，根据需要插入行/空格
			" <s-left>     向左移动
			" <s-right>    向右移动，根据需要插入行/空格
			" <s-up>       向上移动，根据需要插入行/空格
			" <s-down>     向下移动，根据需要插入行/空格
			" <space>      切换到和退出擦除模式
			" >            绘制->箭头
			" <            绘制<-箭头
			" ^            绘制^箭头
			" v            绘制v箭头
			" <pgdn>       替换为\，向下和向右移动，然后插入\
			" <end>        替换为a/，向下和向左移动，然后插入/
			" <pgup>       替换为a/，向上和向右移动，然后插入/
			" <home>       替换为\，向上和向左移动，然后插入\
			" \>           画胖->箭头
			" \<           画胖<-箭头
			" \^           绘制胖^箭头
			" \v           画胖v箭头
			" \a           基于可视块角点的绘制箭头
			" \b           使用可视块选定区域绘制框
			" \e           在可视块内画椭圆
			" \f           用一些字符填充图形
			" \h           为\a\b\e\l创建画布
			" \l           根据可视块的角绘制线
			" \s           向画布添加空格
			" <leftmouse>  选择可视块
			" <s-leftmouse>使用当前画笔（寄存器）拖动和绘制
			" \ra ...\rz   用给定的画笔/寄存器替换文本
			" \pa ...      就像\ra ... \rz，除了考虑空白透明

		" 例子说明：
			" 开启之后有两种模式：画图和擦除，他们之间通过空格来切换。 可以使用按键来控制向八个方向画线（或者擦除）：
			"
			" 方向键的上、下、左、右分别对应其四个方向
			" Pgup                 #上右
			" Pgdn                 #下右
			" Home                 #左上
			" End                  #左下
			" 如下图（其实也不需要记，和键盘上的位置是一致的）：
			"
			"                          Home    Up   Pgup
			"                              \   |   /
			"                               \  |  /
			"                                \ | /
			"                                 \|/
			"                         Left----------Right
			"                                 /|\
			"                                / | \
			"                               /  |  \
			"                              /   |   \
			"                           End   Down  Pgdn
			" 箭头的画法也很直观，简单的箭头用>、、\<、\^、\v来弄（感觉粗的箭头不太好控制）：
			"
			"  >  <|
			"
			"    _ _      .
			"    \ /     /_\
			"     '
			" 用鼠标可以或者进入可视化模式选择块，这对后面的操作有一定的简化，利用用\a（\l不带箭头）来根据选中的块来画线：
			"
			" -------
			"        \-----------
			"                    \-----------
			"                                \----->
			" 或用\b来画矩形框或者用\e来画椭圆：
			"
			" +--------------------+          *************
			" |                    |      ****             ****
			" |                    |    **                     **
			" +--------------------+    *                       *
			"                           **                     **
			"                             ****             ****
			"                                 *************
			" 完事了还可以用\f来对图形进行填充字符：
			"
			" +------------------+
			" |##################|
			" |##################|
			" |##################|
			" +------------------+
			" 位置有一些偏差是常有的事情，这时候不要急着重画：
			"
			" 用鼠标选中要移动的块，然后按住ctrl并拖动鼠标。
			" 当要擦除一整快的内容时，用方向键来搞也比较蛋疼，可以用：
			"
			" 用鼠标选中要擦除的部分，然后执行r （相当于用空格替换）。


	" 配置

	" > 参考资料
		" + []()
" -----------------------------------------------------------------------------
" git和svn版本变化侧边栏显示插件 mhinz/vim-signify

	" 使用说明
		" 会在窗口旁显示当前改动的变化标志

	" 配置

	" > 参考资料
		" + []()
" -----------------------------------------------------------------------------
" 支持多行 f 和F进行跳转插件（注：vim原始的F、f键位只能快速定位当前行justinmk/vim-sneak 

	" 使用说明
		" 正常模式下：
			" s{char}{char}     转到下一个{char}{char}；
			" S{char}{char}     转到上一次出现的{char}{char}；
			" s{char}<Enter>    转到下一个{char}；
			" S{char}<Enter>    转到上一个{char}；
			" s<Enter>          重复最后一次跳转；
			" S<Enter>          反方向重复最后一次跳转；
			" ;                 转到[count]下一个匹配；
			" ,                 转到上一个匹配的[count]；
			" s                 转到[count]下一个匹配；
			" S                 转到上一个匹配的[count]；
			" [count]s{char}{char}       跳转到向下的第 [count] 个匹配；
			" [count]S{char}{char}       跳转到向上的第 [count] 个匹配；
			" {operator}z{char}{char}    当前光标到上一个 {char}{char} 的 operator 操作；
			" {operator}Z{char}{char}    当前光标到下一个 {char}{char} 的 operator 操作；
		" 可视模式的用法和正常模式相似。
	" 配置
		let g:sneak#label = 1
		" map gS <Plug>Sneak_,
	
		" 注意： vim中小写s在正常模式下一直是进入vim的删除字符插入功能，neovim暂时未测试
	" > 参考资料
		" + []()
" ----------------------------------------------------------------------------
" 增强vim中自带的？和/搜索功能，并支持更加高级的正则表达式匹配，同时高亮所有匹配的字符插件 haya14busa/incsearch.vim' 

	" 使用说明
	
	" 配置

	" > 参考资料
		" + []()
		
" ----------------------------------------------------------------------------
" 开源的DOT语言绘制绘图工具插件（需要依赖 graphviz）[可以自动布局，尤其适用于复杂的流程图，结构图等等] liuchengxu/graphviz.vim
	" 使用说明
		" 安装graphviz
			" windows 
				" 1、进入官网下载安装包，下载地址：https://www.graphviz.org/download/ 下载相应的zip包，解压之后将 bin文件夹目录添加到系统环境变量中
				 
			" ArchLinux 
				" sudo pacman -S graphviz

		" 用法
			" 注: 在.gv格式的文件下才会出现Graphviz的命令（原始的dot编译命令: dot -Tpng *.dot -o *.png） 
			" :Graphviz 打开编译后的文件，文件名取自当前文件，辅以不同后缀。默认是打开 pdf 类型，比如当前打开的文件叫 foo.dot，那么 :Graphviz 是尝试打开 foo.pdf 的文件，可以传入扩展名进行指定。
				" 默认打开 pdf 文件，可选项: 'ps', 'pdf', 'png', 'jpg', 'gif', 'svg'
				" 例子：打开 png 文件 :Graphviz png

			" :Graphviz! 会在目标文件不存在的情况下，尝试调用 :GraphvizCompile 进行编译然后再打开，相当于 :GraphvizCompile | Graphviz。

			" :GraphvizCompile 用于编译当前文件，可以指定编译程序和扩展名，默认是 dot pdf
				" :GraphvizCompile [exe] [format]
					" 例子：
					" 用 dot 编译成 pdf           :GraphvizCompile dot pdf
					" 指定编译成 png 格式         :GraphvizCompile png
					" 指定用 dot 编译成 gif 格式  :GraphvizCompile dot gif
		" 例子文件a.gv内容（注意去除 " ）：
				" digraph g {
				"     a->b;
				"     b->c;
				"     c->a;
				" }
				" 1、先执行编译:GraphvizCompile 在执行 :Graphviz 就会在同目录下生成a.pdf文件
	" 配置
		" 指定打开文件的命令。默认会根据平台自动选择
		" macOS 使用 open, Linux 使用 xdg-open 等
		" let g:graphviz_viewer = 'open'

		" 默认编译生成 pdf 格式，如果想要其他格式，将 pdf 换成其他格式即可
		let g:graphviz_output_format = 'png'

	" > 参考资料
		" + [VIM+Graphviz ,打造快速输入，所思，所写，即所见，即所得的流程图编辑环境](https://blog.csdn.net/fangkailove/article/details/8969398)
		" + [在 Vim 中使用 graphviz.vim 画图](https://www.jianshu.com/p/addd29505469)

" -----------------------------------------------------------------------------
"实时通过浏览器预览 markdown 文件（该插件需要vim 支持py2/py3） iamcco/markdown-preview.vim'     

	" 使用说明

	" 配置
		let g:mkdp_path_to_chrome = "chrome"
		" 设置 chrome 浏览器的路径（或是启动 chrome（或其他现代浏览器）的命令）
		" 如果设置了该参数, g:mkdp_browserfunc 将被忽略

		let g:mkdp_browserfunc = 'MKDP_browserfunc_default'
		" vim 回调函数, 参数为要打开的 url

		let g:mkdp_auto_start = 1
		" 设置为 1 可以在打开 markdown 文件的时候自动打开浏览器预览，只在打开
		" markdown 文件的时候打开一次

		let g:mkdp_auto_open = 1
		" 设置为 1 在编辑 markdown 的时候检查预览窗口是否已经打开，否则自动打开预
		" 览窗口

		let g:mkdp_auto_close = 1
		" 在切换 buffer 的时候自动关闭预览窗口，设置为 0 则在切换 buffer 的时候不
		" 自动关闭预览窗口

		let g:mkdp_refresh_slow = 0
		" 设置为 1 则只有在保存文件，或退出插入模式的时候更新预览，默认为 0，实时
		" 更新预览

		let g:mkdp_command_for_global = 0
		" 设置为 1 则所有文件都可以使用 MarkdownPreview 进行预览，默认只有 markdown
		" 文件可以使用改命令

		let g:mkdp_open_to_the_world = 0
		" 设置为 1, 在使用的网络中的其他计算机也能访问预览页面
		" 默认只监听本地（127.0.0.1），其他计算机不能访问

		" nmap <silent> <F8> <Plug>MarkdownPreview        " 普通模式
		" imap <silent> <F8> <Plug>MarkdownPreview        " 插入模式
		" nmap <silent> <C-F8> <Plug>StopMarkdownPreview    " 普通模式
		" imap <silent> <C-F8> <Plug>StopMarkdownPreview    " 插入模式
	 

	" > 参考资料
		" + [Vim安装插件支持 MarkDown 语法、实时预览等](https://www.cnblogs.com/awakenedy/p/11376465.html)

" -----------------------------------------------------------------------------
" 做数学笔记系列 LaTex插件 lervag/vimtex（需要依赖 LaTex 和一个pdf阅读器）

	" 安装依赖
		" Windows安装Texlive
			" 1、下载地址（清华镜像）:https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/	
			" 2、下载后装载：点击文件中的 .bat进行安装（注意：texlive2019-20190410.iso 安装耗时约1个半小时）

		" ArchLinux安装LaTex
			" 1、先安装
			" sudo pacman -S texlive-core texlive-langchinese texlive-latexextra
			" 2、再安装texlive-localmanager-git
			" aurman texlive-localmanager-git

			" 3、使用localmanager安装缺少部分/宏包
			" 方法 使用tllocalmgr 进入命令行，之后缺什么安装什么
			" 命令例子： 
			" tllocalmgr
			" install 包名
			" > 参考资料
			" +[archlinux 安装latex使用中文](http://blog.csdn.net/qq_29343201/article/details/78481114)
"
		" Ubuntu 安装 
			" sudo apt-get install texlive-full

	" 使用说明
		" Vimtex 使用了 filetype 特性，所以相关的命令与缩进规则与只在 *.tex 文件中有效
		  " ---------------------------------------------------------------------
		  "   "    LHS              RHS                                   MODE
		  " ---------------------------------------------------------------------
		  "  <localleader>li  |<plug>(vimtex-info)|                           `n`
		  "  <localleader>lt  |<plug>(vimtex-toc-open)|                       `n`
		  "  <localleader>lT  |<plug>(vimtex-toc-toggle)|                     `n`
		  "  <localleader>lv  |<plug>(vimtex-view)|                           `n`
		  "  <localleader>ll  |<plug>(vimtex-compile)|                        `n`
		  "  <localleader>lo  |<plug>(vimtex-compile-output)|                 `n`
		  "  <localleader>lg  |<plug>(vimtex-status)|                         `n`
		  "  <localleader>lG  |<plug>(vimtex-status-all)|                     `n`
		  "  <localleader>lc  |<plug>(vimtex-clean)|                          `n`
		  "  <localleader>lC  |<plug>(vimtex-clean-full)|                     `n`
		  "  dse              |<plug>(vimtex-env-delete)|                     `n`
		  "  dsc              |<plug>(vimtex-cmd-delete)|                     `n`
		  "  cse              |<plug>(vimtex-env-change)|                     `n`
		  "  csc              |<plug>(vimtex-cmd-change)|                     `n`
		  "  <F7>             |<plug>(vimtex-cmd-create)|                     `nxi`
		  "  ]]               |<plug>(vimtex-delim-close)|                    `i`
		  " ---------------------------------------------------------------------

		" 编辑一份LaTex（.tex等格式的文本）文件后，
		" 在Normal模式下敲\ll启动编译了。
		" 之后，Vimtex会调用Latexmk来调度不同的程序完成一次完整编译过程。（一般为了生成正确的交叉引用等，需要对源文件进行多次编译。）
		" 这里 MiKTeX 会提醒你：“还没有安装Latexmk呢，需要安装吗？”这里狠狠地点击“Install”就完事了。如果使用的是Windows，Latexmk还会提醒你还没有安装Perl解释器。啥都别说了，乖乖去 http://perl.org下载安装Perl，然后再启动编译一遍吧
		" 继续。这时MiKTeX会提示你这个包要不要装，那个包要不要装，咱当然是一路“Install”。如果你的代码没问题的话，稍等片刻Vimtex就会启动SumatraPDF展示你第一篇LaTeX文档的模样了。如果不幸出了一些错误，Vimtex也会告诉你第几行出现了什么问题（即上面提到的“quickfix”功能）。



	" 配置

		if(isLinux)
			let g:tex_flavor='latex'
			" 设置对应预览pdf阅读器
			" let g:vimtex_view_method='apvlv'
			" let g:vimtex_view_method='zathura'
			let g:vimtex_quickfix_mode = 2
			let g:vimtex_view_general_viewer  = 'apvlv'
			" let g:vimtex_compiler = 'xexlatex'
			" Arch下编译时用latexmk,配置文件在~/.latexmkrc
			" 注：latex默认是用pdflatex编译，建议改为xelatex
			" 需到.latexmkrc配置文件中添加值 $pdflatex = "xelate -file-line-error --shell-escape -src-special -synctex=1 -iteraction=nonstopmode %0 %S;cp %D %R.pdf"

			" 控制隐藏
			" 开启除了光标所在行之外，文本夹杂的LaTex代码就都会隐藏或者替换成其他符号
			set conceallevel=1
			let g:tex_conceal='abdmg'
		endif

		if(isWindows)
			" 配置一：
			let g:vimtex_quickfix_ignored_warnings   = []
				"      \ 'Underfull',
				"      \ 'Overfull',
				"      \ 'specifier changed to',
				"      \ 'Package mpgraphics Warning',
				"       \]
			let g:tex_flavor                          = 'latex'
			let g:vimtex_quickfix_mode                = 2
			let g:vimtex_latexmk_options              = '-xelatex -verbose -file-line-error -synctex=1 -shell-escape -interaction=nonstopmode' 
			" 设置对应预览pdf阅读器
			let g:vimtex_view_general_viewer          = 'SumatraPDF'
			let g:vimtex_view_general_options         = '-reuse-instance -inverse-search "\"' . $VIMRUNTIME . '\gvim.exe\" -n --remote-silent +\%l \"\%f\"" -forward-search @tex @line @pdf'
			let g:vimtex_view_general_options_latexmk = '-reuse-instance'
			" 控制隐藏
			" 开启除了光标所在行之外，文本夹杂的LaTex代码就都会隐藏或者替换成其他符号
			set conceallevel=1
			let g:tex_conceal='abdmg'

			" 每当保存文件的时候，Vimtex（其实是Latexmk）就会自动编译新的文档，SumatraPDF也会自动更新为最新的编译输出。
			" 配置了正反向查找后：
			" 在SumatraPDF里双击可以让Vim跳转到对应的LaTeX代码。
			" 执行\lv来让SumatraPDF打开编译出的文档，并跳转到光标当前所在源码处的对应位置。
			" 注： 编译不成功，可能是是Texlive配置问题，缺少相关宏包，或者tex写法不对
			" 
			
			" "配置二:
				" " 阅读器相关的配置 包含正反向查找功能 仅供参考
				" let g:tex_flavor='latex'
				" let g:vimtex_view_general_viewer = 'SumatraPDF'
				" let g:vimtex_view_general_options_latexmk = '-reuse-instance'
				" let g:vimtex_view_general_options
				" \ = '-reuse-instance -forward-search @tex @line @pdf'
				" \ . ' -inverse-search "' . exepath(v:progpath)
				" \ . ' --servername ' . v:servername
				" \ . ' --remote-send \"^<C-\^>^<C-n^>'
				" \ . ':execute ''drop '' . fnameescape(''\%f'')^<CR^>'
				" \ . ':\%l^<CR^>:normal\! zzzv^<CR^>'
				" \ . ':call remote_foreground('''.v:servername.''')^<CR^>^<CR^>\""'
		endif
		

	" > 参考资料
		" + []()
" -----------------------------------------------------------------------------
" PlantUML预览插件weirongxu/plantuml-previewer.vim  配置

	" 依赖
		" Java
		" plantuml.jar
			" ArchLinux: sudo pacman -S plantuml 
		" Graphviz (https://www.graphviz.org/download/)
			" MacOS: brew install graphviz
			" Ubuntu: sudo apt-get install graphviz
			" ArchLinux: sudo pacman -S graphviz
			" Windows10: 进入官网下载安装包，下载地址：https://www.graphviz.org/download/ 下载相应的zip包，解压之后将 bin文件夹目录添加到系统环境变量中
 
		" tpope/open-browser.vim 插件
		" aklt/plantuml-syntax 插件 (vim syntax file for plantuml)

	" 使用说明
		" 在vim开始编辑PlantUMl
		" 运行:PlantumlOpen 在浏览器中预览
		" 在vim保存PlantUML文件，浏览器会刷新
		" 命令：
			" :PlantumlOpen                         " Open previewer webpage in browser, and watch current buffer
			" :PlantumlStart                        " Like PlantumlOpen, but won't open in browser
			" :PlantumlStop                         " Stop watch buffer
			" :PlantumlSave [filepath] [format]     " Export uml diagram to file path
		
		" Available formats
			" png, svg, eps, pdf, vdx, xmi, scxml, html, txt, utxt, latex

		" 例子/Example:
			" :e diagram.puml
			" :PlantumlSave
			" :PlantumlSave diagram.png
			" :PlantumlSave diagram.svg
	" 配置
		" let g:plantuml_previewer#save_format='png'  " 默认png
		" let g:plantuml_previewer#save_format='svg'  " 默认png
		" 用vim-slumlord插件中的plantuml.jar
		" let g:plantuml_previewer#plantuml_jar_path = g:myPlugPath."/vim-slumlord/plantuml.jar"

		" if(isLinux)
		"     if(isVim)
		"         let g:plantuml_previewer#plantuml_jar_path = '~/.vim/plugPluginsFolder/vim-slumlord/plantuml.jar'
		"     endif
		"     if(isNeovim)
		"         let g:plantuml_previewer#plantuml_jar_path = '~/.nvim/plugPluginsFolder/vim-slumlord/plantuml.jar'
		"     endif
		" endif
		" if(isWindows)
		"     let g:plantuml_previewer#plantuml_jar_path = '~/.vim/PlantUML/plantuml.jar'
		"     let g:plantuml_previewer#plantuml_jar_path = 'C:\tools_bin\PlantUML\plantuml.jar'
		" endif
        "
		" if(isLinux)
		"     " ArchLinux 安装 sudo pacman -S  plantuml
		"     let g:plantuml_previewer#plantuml_jar_path = '/usr/share/java/plantuml/plantuml.jar'
		" endif
        "
		" " MacOS

		" let g:plantuml_previewer#viewer_path = myPlugPath

	" > 参考资料
		" + []()


" -----------------------------------------------------------------------------
" PlantUML预览插件	scrooloose/vim-slumlord
" PlantUML预览(依赖PlantUML) 将PlantUML的图像转成字符插入文件的PlantUML代码上方预览 d但是文件需为.uml
	" 依赖
		" Java
		" plantuml.jar （插件文件中带有plantuml.jar 更新直接将新的plantuml.jar替换位置在~/.vim/plugPluginsFolder/vim-slumlord/plantuml.jar）
		" aklt/plantuml-syntax 插件 (vim syntax file for plantuml)
		" 注意：本插件只在.uml文件编辑保存时启用
	" 配置
		"
	" > 参考资料
		" + []()
" -----------------------------------------------------------------------------
" 代码片段补全引擎插件（代码片段管理） 'SirVer/ultisnips'

	" 使用说明
	" 配置

	" > 参考资料
		" + [vim下使用]UltiSnips](https://www.cnblogs.com/jiading/p/11666319.html)
		" + [VIM 代码片段插件 ultisnips 使用教程-10235818-51CTO博客](https://blog.51cto.com/10245818/2167828)
" -----------------------------------------------------------------------------
" 代码补全模板 'honza/vim-snippets' 
	" 使用说明
		" vim-snippets 默认支持很多中语言的代码片段。默认的代码片段文件放在~/.vim/bundle/vim-snippets/UltiSnips 目录下。
		" 如果没有使用Vundle的话，目录会在 ~/.vim/plugin/vim-snippets/UltiSnips 下。根据支持的文件类型不同，文件的名称不同。
		" 例如 Python 的配置文件对应的是 Python.snippets 。vim 打开后缀为 py 的文件就是加载 python.snippets 文件中的代码片段。在这个我文件中也可以增加我们的代码片段。但是这样做的话，不方便我们自定义代码片段的保存和同步。换机器或是卸载插件的时候，自定义的的插件就会丢失。
		
		" 注：其中有个 all.snippets 是唯一一个所有文件都适用的代码片段

		" 更好的方法是单独新建一个目录，专门保存自定义的代码片段。具体的操作方法是：

		" 创建一个文件夹 .vim/mysnippets/
		" 在 .vimrc 文件中指定代码片段搜索文件夹。let g:UltiSnipsSnippetDirectories=["UltiSnips","mysnippets"]
		" 在 mysnippets 文件夹中创建自己的代码片段文件。
		" 完成了以上三步，只需要将 mysnippets 文件夹备份好，就可以很好的备份和管理自定义的代码片段了。

	" 配置

	" > 参考资料
		" + [vim-snippets使用 - 简书](https://www.jianshu.com/p/8538f456537c)
		"
" -----------------------------------------------------------------------------
" markdown预览（生产html在浏览器中预览）[支持流程图、甘特图、mermaid、PlantUML]插件  previm/previm

	" 使用说明
		" 在.md文件执行:PrevimOpen 会打开浏览器加载生成html
		" :PrevimWipeCache

	" 配置
		"
	" > 参考资料
		" + []() 

" -----------------------------------------------------------------------------
"  打开浏览器插件 ·tpope/open-browser

	" 使用说明
		" " Open URI under cursor.
		" nmap map-you-like <Plug>(openbrowser-open)
		" " Open selected URI.
		" vmap map-you-like <Plug>(openbrowser-open)
		"
		" " Search word under cursor.
		" nmap map-you-like <Plug>(openbrowser-search)
		" " Search selected word. vmap map-you-like <Plug>(openbrowser-search)
		"
		" " If it looks like URI, open an URI under cursor.
		" " Otherwise, search a word under cursor.
		" nmap map-you-like <Plug>(openbrowser-smart-search)
		" " If it looks like URI, open selected URI.
		" " Otherwise, search selected word.
		" vmap map-you-like <Plug>(openbrowser-smart-search)
		"
		" " Open http://google.com/ in a web browser.
		" :OpenBrowser http://google.com/
		" " Search the word "vim". (Default search engine is google)
		" :OpenBrowserSearch vim
		" " Search the word "openbrowser" in www.vim.org .
		" :OpenBrowserSearch -vim openbrowser
		" " If it looks like URL, open the URL in a web browser.
		" :OpenBrowserSmartSearch http://www.vim.org/
		" " If it does not look like URL, open the word
		" " in the default search engine.
		" :OpenBrowserSmartSearch emacs download
		" " Also you can specify another search engine.
		" :OpenBrowserSmartSearch -github tyru

	" 配置  
	
	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------
" markdown实时预览插件 pingao777/markdown-preview-sync

" -----------------------------------------------------------------------------
" 如果行尾有多余的空格，会高亮显示出来，此时，执行 :StripWhitespace 就可以自动消除 ntpeters/vim-better-whitespace

" -----------------------------------------------------------------------------
" 可以在命令模式下用Emacs快捷键tpope/vim-rsi
"
" -----------------------------------------------------------------------------
" 编辑一个被Git跟踪过的文件，然后 `:Agit` 之后jk就可以看提交历史 cohama/agit.vim
"
" -----------------------------------------------------------------------------
" 打字时出声音插件  xxxx  配置 'kywind30000/vim-keysound'  

	" " 使用说明
	"     " 需要依赖：
	"     "     Python or Python3 integration in vim
	"     "     PySDL2 with SDL2 binaries.
	"     "     PySDL2 is used to provide low-latency audio playback.
	"     " 安装PySDL
	"     " windows:
	"     " ArchLinux: aurman -S python-pysdl2 ; pip install pysdl2 ;sudo pacman -S sdl2 lib32-sdl2 sdl2_mixer;
	"     " CentOS: pip install pysdl2 or pip3 install pysdl2
	"     " Ubuntu: apt-get install python-sdl2 or apt-get install python3-sdl2
	" " 配置
		let g:keysound_enable = 1
		let g:keysound_theme = 'default'
		let g:keysound_py_version = 3
		let g:keysound_volume = 500

	" > 参考资料
		" + []()
		"
" -----------------------------------------------------------------------------
" 快速对其文本插件  'junegunn/vim-easy-align'

	" 使用说明
		" 基础三步使用
		"   进入选择模式选中要处理的对象
		"   输入Aglign或者设置的快捷命令进入对其模式
		"   输入要使用的对齐的字符
		"   例子：
		"      1、Shift+v，然后键盘上下方向键移动，列选择。
		"      2、Shift+：（冒号），然后输入对应操作参数，详见下节。
		"      3、输入Align ；（按照分号对齐），然后回车，"
		"
		" 支持的分隔符: <Space> = : . | & # ,
		" 高级用法i（separator 表示分隔u号）
			" {separator}          - 分隔符 常用的有: <Space> = : . | & # ,
			" n{separator}         - 应用到第 n 个分隔符, 负数表示倒着数
			" <Enter>              - 回车控制对齐方向, 默认为左对齐; 1个回车右对齐; 2个回车居中对齐; 3个回车回到左对齐; 依次类推…
			" *{separator}         - 一个星号 + 分隔符表示 应用到所有的分隔符
			" **{separator}        - 2个星号表示交替对齐: 第一列右对齐, 第二列左对齐, 第三列右对齐, 以此类推…
			" <Enter>**{separator} - 回车 + 2个星号 也是交替对齐: 第一列左对齐, 第二列右对齐, 第三列左对齐, 以此类推…
			
	" 配置
		" Start interactive EasyAlign in visual mode (e.g. vipga)
		xmap ga <Plug>(EasyAlign)	
		" Start interactive EasyAlign for a motion/text object (e.g. gaip)
		nmap ga <Plug>(EasyAlign)
		vmap <Leader>a <Plug>(EasyAlign)
		nmap <Leader>a <Plug>(EasyAlign)
		if !exists('g:easy_align_delimiters')
		 let g:easy_align_delimiters = {}
		endif
		let g:easy_align_delimiters['#'] = { 'pattern': '#', 'ignore_groups': ['String'] }


	" > 参考资料
	" - [vim-easy-align 对齐文本so easy[视频] - 知乎](https://zhuanlan.zhihu.com/p/41615269)
	"- [2个好用的vim插件推荐 - 冷冷北极 - 博客园](https://www.cnblogs.com/loves6036/p/12345843.html)


" -----------------------------------------------------------------------------
" 快速环绕插入符号插件 'tpope/vim-surround'
" surround插件就是对Vimi的surrounding内文本的编辑功能这部分功能的增强（要更改成对的括号，引号）
	" vim 本身的surrounding内的文本操作方法
		" ci 例如，ci(，或者ci)，将会修改()之间的文本；
			" ci[ ci( ci< ci{ 删除一对 [], (), <>, 或{} 中的所有字符并进入插入模式
			" ci” ci’ ci` 删除一对引号字符 ”  ‘ 或 ` 中所有字符并进入插入模式
			" cit 删除一对 HTML/XML 的标签内部的所有字符并进入插入模式
		" di  剪切配对符号之间文本,并进入插入模式 例如 di( di[ di{
		" yi  复制配对符号之间的文本，并进入插入模式 例如 yi( yi[ yi{
		" ca  同ci，但修改内容包括配对符号本身
		" da  同di，但剪切内容包括配对符号本身
		" ya  同yi，但复制内容包括配对符号本身。
		"
		" PS. dib等同于di(。diB等同于di{。
		
	" 使用说明
		" 例子
		" | Old text              | Command | New text                  |
		" |-----------------------|---------|---------------------------|
		" | "Hello *world!"       | ds"     | Hello world!              |
		" | [123+4*56]/2          | cs])    | (123+456)/2               |
		" | "Look ma, I'm *HTML!" | cs"<q>  | <q>Look ma, I'm HTML!</q> |
		" | if *x>3 {             | ysW(    | if ( x>3 ) {              |
		" | my $str = *whee!;     | vllllS' | my $str = 'whee!';        |
		" | <div>Yo!*</div>       | dst     | Yo!                       |
		" | <div>Yo!*</div>       | cst<p>  | <p>Yo!</p>                |
		" 解释一下，*代表当前光标位置，添加替换时使用后半括号)]}，添加的括号和内容间就没有空格（如第2个示例），反之会在内容前后添加一个空格（如第4个实例）。第6个示例中的t代表一对HTML或者xml tag。其他表示范围的符号：w代表word, W代表WORD(被空格分开的连续的字符窜），p代表paragraph。
			" Normal mode
			" -----------
			" ds  - delete a surrounding
			" cs  - change a surrounding
			" ys  - add a surrounding
			" yS  - add a surrounding and place the surrounded text on a new line + indent it
			" yss - add a surrounding to the whole line
			" ySs - add a surrounding to the whole line, place it on a new line + indent it
			" ySS - same as ySs
            "
			" Visual mode
			" -----------
			" s   - in visual mode, add a surrounding
			" S   - in visual mode, add a surrounding but place text on new line + indent it
            "
			" Insert mode
			" -----------
			" <CTRL-s>         - in insert mode, add a surrounding
			" <CTRL-s><CTRL-s> - in insert mode, add a new line + surrounding + indent
			" <CTRL-g>s        - same as <CTRL-s>
			" <CTRL-g>S        - same as <CTRL-s><CTRL-s>
	" 配置
		" vmap " S"
		" vmap ' S'
		" vmap ` S`
		" vmap [ S[
		" vmap ( S(
		" vmap { S{
		" vmap } S}
		" vmap ] S]
		" vmap ) S)
		" vmap > S>

		" 比如下面代码我想快速在 iostream 加上<>那么可以这样操作：
			" ve 选中iostream这个单词
			" > 给iostream加上尖括号
	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------	
" 快速选中文本对象插件  'gcmt/wildfire.vim'  
	" 使用说明:
	" 	1、在一组候选对象中快速选择最接近的文本对象。默认情况下 i'，i"，i)，i]，i}，ip和it。
	"   在正常模式(命令模式)下按<ENTER> 回车键，选择最接近的文本对象。
	"		按住<ENTER>以选择下一个最接近的文本对象。
	"       反之，即选择先前选择的文本对象，请按<BS> 退格键。
	" 	2、为了加快处理速度，如果要选择n最接近的文本对象，可以先按一个数字，然后按一个数字<ENTER>（例如，按2<ENTER>将选择第二个最接近的文本对象）。
	"	3、您可以使用以下方法更改默认映射：
	"    "  设置为正常模式(命令模式)按 Space（空格键） 这将选择下一个最接近的文本对象 This selects the next closest text object.
	"    map <SPACE> <Plug>(wildfire-fuel)
	"    " 设置为视图选择模式下按Ctrl+ Space（空格键） 这将选择上一个最接近的文本对象 his selects the previous closest text object.
	"    vmap <C-SPACE> <Plug>(wildfire-water)

	" 默认情况下，野火选择任何文本对象i'，i"，i)，i]，i}，ip和it。您可以使用以下选项来决定要考虑的选项：
	" 	let g:wildfire_objects = ["i'", 'i"', "i)", "i]", "i}", "ip", "it"]

	" 高级用法:
	" 	1、有时考虑某些类型的文本对象可能会很烦人。Html就是这种情况，例如，您可能只想选择标记对象。
	"	   Wildfire允许您选择使用不同文件类型考虑哪些文本对象：
	" 		使用'*'表示'所有其他文件类型' ，在此示例中，html和xml共享相同的文本对象，
	"		" use '*' to mean 'all other filetypes'
	"		" in this example, html and xml share the same text objects
	"		let g:wildfire_objects = {
    "		\ "*" : ["i'", 'i"', "i)", "i]", "i}"],
    "		\ "html,xml" : ["at", "it"],
	"		\ }

	" 快速选择:
	" Wildfire不会为快速选择设置默认映射。请确保在您的内容中添加以下内容.vimrc：
	" 	nmap <leader>s <Plug>(wildfire-quick-select)

	" 默认情况下，快速选择使用中的文本对象g:wildfire_objects设置“选择标记”。如果您想使用其他文本对象而不必进行更改，请看下面的示例g:wildfire_objects。
	" 	cal wildfire#triggers#AddQs("<leader>s", {
    " 	\ "*" : ["i)", "i]"],
	" 	\ })

	" 配置 
	" 默认是Enter键 自动选择最近的代码快
	map <SPACE> <Plug>(wildfire-fuel)


" -----------------------------------------------------------------------------
" 打字机主题  'logico/typewriter'  

	" 使用说明

	" 配置
		 " Set typewriter as colorscheme
		 "colorscheme typewriter

		 " Set typewriter airline theme
		 if(isVim)
			let g:airline_theme = 'typewriter'
		 endif 
		 " Activate FOCUS mode with F12
		 " nmap <F10> :Goyo <bar> Limelight!!<CR>"

		 " " Change the cursor from block to i-beam in INSERT mode
		 " let &t_SI = "\e[5 q"
		 " let &t_EI = "\e[1 q"
		 " augroup myCmds
		 "   au!
		 "   autocmd VimEnter * silent !echo -ne "\e[1 q"
		 " augroup END

	" > 参考资料
		" + []()
" -----------------------------------------------------------------------------
" 平滑上下页滚动(原生的没有过渡动画) 'terryma/vim-smooth-scroll'

	" 使用说明

	" 配置
		 noremap <silent> <c-u> :call smooth_scroll#up(&scroll, 0, 2)<CR>
		 noremap <silent> <c-d> :call smooth_scroll#down(&scroll, 0, 2)<CR>
		 noremap <silent> <c-b> :call smooth_scroll#up(&scroll*2, 0, 4)<CR>
		 noremap <silent> <c-f> :call smooth_scroll#down(&scroll*2, 0, 4)<CR>

	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------
"  老牌的代码对齐插件  godlygeek/tabular 
	" Tabular的命令主要基于正则表达式。 Tabular使用的基本技术是使用一些正则表达式
	" 来匹配字段分隔符，在这些分隔符处分割输入行，从非分隔符部分修剪不必要的空格，
	" 用空格填充非定界符部分以使其具有相同的长度 并加入到一起。
	
	" 使用说明
		" :Tabularize 可简化为 :Tab，以下都省略了选中区域后自动生成的 '<,'>：
		"
		" 冒号对齐：
		" :Tab /:
		" 逗号对齐 
		" :Tabularize /,
		" 运行上一个对齐命令 :Tab
		" // 对齐（需要 escape）: :Tab /\/\/
		" :Tabularize /,/r1c1l0 含义是：对齐指定区域的文本，以逗号分割。将第一个逗
		" 号前的所有文本右对齐，然后添加一个空格；将逗号居中对齐，然后添加一个空格
		" ；然后将逗号后所有文本左对齐，不添加空格（添加 0 个空格）。
		"
	
	" 配置
	
	" > 参考资料
		" - [Vim 文本对齐插件 tabular 简介_运维_Hustlion 的技术博客-CSDN博客](https://blog.csdn.net/techfield/article/details/84186402


" -----------------------------------------------------------------------------
"  异步语法检查与语义错误提示插件 dense-analysis/ale 
	"  在Vim中显示正在编辑的文件中的警告和错误。换句话说，这个插件允许你在打字的时候刷线。
	"  ALE通过:ALEFix特性以非阻塞的方式支持使用命令行工具修复代码，支持多种语言中的工具，如prettier、eslint、autopep8等。
	"  
	"  ale 的工作原理是使用 Vim 异步函数调用后台命令来发现语法错误，ale 会根据当前文件的文件类型选择合适的后台命令，这后台命令是需要单独安装并且得确保在终端下能正常使用。

"
	" 使用说明
		" ALE acts as a "language client" to support a variety of Language Server Protocol features, including:
		"     Diagnostics (via Language Server Protocol linters)
		"     Go To Definition (:ALEGoToDefinition)
		"     Completion (Built in completion support, or with Deoplete)
		"     Finding references (:ALEFindReferences)
		"     Hover information (:ALEHover)
		"     Symbol search (:ALESymbolSearch)
		"
		" :ALEToggle    " 启动ALE
		" :ALEEnable     " 使能ALE
		" 查看可用linter的话用 :ALEInfo 命令

	" 配置
		" " Fix files with prettier, and then ESLint.
		" let b:ale_fixers = ['prettier', 'eslint']
        "
		" " Equivalent to the above.
		" let b:ale_fixers = {'javascript': ['prettier', 'eslint']}
        "
		" " In ~/.vim/vimrc, or somewhere similar.
		" " Set this variable to 1 to fix files when you save them.
		" let g:ale_fix_on_save = 1
        "
		" let g:ale_completion_enabled = 1
		" let g:ale_completion_tsserver_autoimport = 1
        
		" 注意: fenc是等于空格，不要去掉=后面的空格 vim不让你保存，提示fenc这个东西。
		set fenc= 
		" ale-setting 
		let g:ale_set_highlights = 0
		" 自定义error和warning图标
		let g:ale_sign_error = '✗'
		let g:ale_sign_warning = '⚡'
		" 在vim自带的状态栏中整合ale
		let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK']
		" 显示Linter名称,出错或警告等相关信息
		" let g:ale_echo_msg_error_str = 'E'
		" let g:ale_echo_msg_warning_str = 'W'
		" let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
		" 打开文件时不进行检查
		let g:ale_lint_on_enter = 0
		" 普通模式下，sp前往上一个错误或警告，sn前往下一个错误或警告
		" nmap sp <Plug>(ale_previous_wrap)
		" let g:ale_fixers = {
		" \   '*': ['remove_trailing_lines', 'trim_whitespace'],
		" \   'javascript': ['eslint'],
		" \}
		" 使用clang对c和c++进行语法检查，对python使用pylint进行语法检查
		let g:ale_linters = {
			\   '*': ['remove_trailing_lines', 'trim_whitespace'],
			\   'javascript': ['eslint'],
			\   'c++': ['clang'],
			\   'c': ['clang'],
			\   'python': ['pylint'],
			\}
			" 注：  remove_trailing_lines 删除尾随换行符号;
			"		trim_whitespace       删除空白行;
		" Clang安装：ArchLinux: sudo pacman -S clang ;
		" pylint安装：pip install  pylint
		" eslint安装： npm install -g eslint;

	
	" > 参考资料
		" - [eslint的安装和使用方法_运维_毛祥明-Zoe-CSDN博客](https://blog.csdn.net/zz__zzmomo/article/details/83659578a)
		" - [利用 ESLint 检查代码质量 - 五艺 - 博客园](https://www.cnblogs.com/y896926473/articles/6959627.html)

" -----------------------------------------------------------------------------
"  代码自动格式化美化插件 Chiel92/vim-autoformat 
" 需要python特性支持

	" 使用说明
	
	" 配置
		" 设置代码格式文件路径
		" let g:formatterpath = ['/some/path/to/a/folder','/home/superman/formatters']

		" 禁用/启用对vim缩进文件的回退、重新删除并删除尾随空格，0 为禁用
		" let g:autoformat_autoindent = 0
		" let g:autoformat_retab = 0
		" let g:autoformat_remove_trailing_spaces = 0
		"
		" 使用以下命令手动自动缩进、 重新制表或删除尾随空格
		" gg=G
		" :retab
		" :RemoveTrailingSpaces
		
		" 禁用具有不合格缩进文件的文件类型的自动缩进
		" autocmd FileType vim,tex let b:autoformat_autoindent=0
		"
		" 自动格式化代码快捷键映射
		" noremap <F3> :Autoformat<CR>
		" let g:autoformat_verbosemode=1

		" 指定html格式化工具，并设置缩进为两个空格
		" let g:formatdef_my_html = '"html-beautify -s 2"'
		" let g:formatters_html = ['my_html']
		"
		" 保存时自动格式化代码，针对所有支持的文件
		" au BufWrite * :Autoformat
		" "保存时自动格式化PHP代码
		" "au BufWrite *.php :Autoformat
	
	" > 参考资料
		" - [Linux Vim代码格式化/美化插件vim-autoformat安装 - 爱E族](http://aiezu.com/article/linux_vim_plugin_autoformat_install.html)


" -----------------------------------------------------------------------------
" buffer插件 zefei/vim-wintabs
	" 用法
		" By default, wintabs maintains a list of buffers for each buffer opened in each window, and displays them on tabline. To navigate and manage these buffers, a few commands and key mappings are provided, and they are very similar to what Vim buffers/tabs have.
		"
		" To make full use of wintabs, it is recommended to have the following commands or keys mapped, these are the essential ones:
		"
		" commands             | mapping keys                 | replacing Vim commands
		" ---------------------+------------------------------+-----------------------
		" :WintabsNext         | <Plug>(wintabs_next)         | :bnext!
		" :WintabsPrevious     | <Plug>(wintabs_previous)     | :bprevious!
		" :WintabsClose        | <Plug>(wintabs_close)        | :bdelete
		" :WintabsUndo         | <Plug>(wintabs_undo)         |
		" :WintabsOnly         | <Plug>(wintabs_only)         |
		" :WintabsCloseWindow  | <Plug>(wintabs_close_window) | :close, CTRL-W c
		" :WintabsOnlyWindow   | <Plug>(wintabs_only_window)  | :only, CTRL-W o
		" :WintabsCloseVimtab  | <Plug>(wintabs_close_vimtab) | :tabclose
		" :WintabsOnlyVimtab   | <Plug>(wintabs_only_vimtab)  | :tabonly
	" 配置
		if(isNeovim) 
			map <C-H> <Plug>(wintabs_previous)
			map <C-L> <Plug>(wintabs_next)
			map <C-c> <Plug>(wintabs_close)
			" map <C-T>c <Plug>(wintabs_close)
			" map <C-T>u <Plug>(wintabs_undo)
			" map <C-T>o <Plug>(wintabs_only)
			" map <C-W>c <Plug>(wintabs_close_window)
			" map <C-W>o <Plug>(wintabs_only_window)
			" command! Tabc WintabsCloseVimtab
			" command! Tabo WintabsOnlyVimtab
		endif

" -----------------------------------------------------------------------------
" buffer插件 zefei/vim-wintabs-powerline 主题

	" 配置
		" let g:wintabs_powerline_arrow_left = " \u25c0 "
		" Left pointing arrow, used as previous buffers indicator.

		" let g:wintabs_powerline_arrow_right = " \u25b6 "
		" Right pointing arrow, used as next buffers indicator.

		" let g:wintabs_powerline_sep_buffer_transition, "\ue0b0"
		" Separator between inactive and active buffers.

		" let g:wintabs_powerline_sep_buffer = "\ue0b1"

		" Separator between inactive buffers.

		" let g:wintabs_powerline_sep_tab_transition = "\ue0b2"
		" Separator between inactive and active vimtabs.

		" let g:wintabs_powerline_sep_tab = "\ue0b3"
		" Separator between inactive vimtabs.

		" highlight link WintabsEmpty TabLineFill
		" Highlight group for background.

		" highlight link WintabsActive TabLineSel

		" Highlight group for active buffer/tab.

		" highlight link WintabsInactive TabLine

		" Highlight group for inactive buffer/tab.

		" highlight link WintabsArrow TabLine
		" Highlight group for arrows.

		" highlight link WintabsActiveNC TabLine
		" Highlight group for active buffer/tab in not-current windows.

		" highlight link WintabsInactiveNC TabLine
		" Highlight group for inactive buffer/tab in not-current windows.

" -----------------------------------------------------------------------------
" tmux状态栏主题插件 edkolev/tmuxline.vim
"
	" 使用
		"
		":Tmuxline [theme] [preset]
		":TmuxlineSnapshot [file]

	" 配置
		" If you set airline theme manually, make sure the airline-tmuxline extension is disabled, so it doesn't overwrite the theme:
		" let g:airline#extensions#tmuxline#enabled = 0
		" let g:tmuxline_preset = 'tmux'
		" let g:tmuxline_preset = 'full'
		" let g:tmuxline_preset = 'nightly_fox'
		" let g:tmuxline_powerline_separators = 0
		" let g:tmuxline_theme = 'iceberg'
		" let g:tmuxline_theme = 'zenburn'
		" let g:tmuxline_theme = 'jellybeans'


" -----------------------------------------------------------------------------
" vim + tmux窗格平滑切换 christoomey/vim-tmux-navigator
"
	" 使用
		" <ctrl-h> => Left
		" <ctrl-j> => Down
		" <ctrl-k> => Up
		" <ctrl-l> => Right
		" <ctrl-\> => Previous split

	" 配置
		" 如果您不希望插件创建任何映射，您可以使用提供的五个功能来定义自己的自定义地图。您将需要在您的~/.vimrc中定义自定义映射，并更新tmux中的绑定以匹配。
		let g:tmux_navigator_no_mappings = 1
		nnoremap <silent> <c-h> :TmuxNavigateLeft<cr>
		nnoremap <silent> <c-j> :TmuxNavigateDown<cr>
		nnoremap <silent> <c-k> :TmuxNavigateUp<cr>
		nnoremap <silent> <c-l> :TmuxNavigateRight<cr>
		nnoremap <silent> <c-p>  :TmuxNavigatePrevious<cr>
		" 其他配置说明
			" 需要在~/.tmux.conf 添加:
			" # Smart pane switching with awareness of Vim splits.
			" # See: https://github.com/christoomey/vim-tmux-navigator
			" is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
			"     | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
			" bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h'  'select-pane -L'
			" bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j'  'select-pane -D'
			" bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k'  'select-pane -U'
			" bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l'  'select-pane -R'
			" tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")'
			" if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \
			"     "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\'  'select-pane -l'"
			" if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \
			"     "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\'  'select-pane -l'"
			" bind-key -T copy-mode-vi 'C-h' select-pane -L
			" bind-key -T copy-mode-vi 'C-j' select-pane -D
			" bind-key -T copy-mode-vi 'C-k' select-pane -U
			" bind-key -T copy-mode-vi 'C-l' select-pane -R
			" bind-key -T copy-mode-vi 'C-\' select-pane -l

" -----------------------------------------------------------------------------
" 语言补全平台插件 coc.nvim 

	" 使用说明

		
	" 配置
		" 需要依赖
			" nodejs版本>=10.12
			" Vim版本>=8.0
			" 使用npm安装yarn: npm i yarn -g	
			" 问题：使用yarn安装依赖包时报错，提示信息：error An unexpected error occurred: 解决方案：把资源地址设置成npm淘宝源
				" npm config set registry https://registry.npm.taobao.org
				" npm config set disturl https://npm.taobao.org/dist
				" 原因：代理出现了问题，解决方案：删除之即可
				" npm config rm proxy 
				" npm config rm https-proxy
				" 问题：node-sass缓慢 解决方案：
				" yarn config set sass-binary-site http://npm.taobao.org/mirrors/node-sass
				" 或
				" npm config set sass-binary-site http://npm.taobao.org/mirrors/node-sass
				" zsh 用户需要在 vimrc 中添加 set shell=/bin/sh
			if(isLinux)
				set shell=/bin/sh
			endif

			if((isMacVim) || (isWindows) || (isGUI))
				let g:coc_disable_startup_warning = 0
			else
				" 关闭coc的警告 在mac的命令行打开时出现警告
				let g:coc_disable_startup_warning = 1
			endif
			
		" :checkhealth                 " 检查安装
		" :CocConfig                   " 进入语言服务器配置 打开配置文件
		" :CocList extensions          "  管理 coc 插件
		" :CocInstall [插件名]
		" 如:CocInstall coc-pyls coc-json coc-html coc-css  " 添加python、html、json、css的语言支持
		" :CocUninstall [插件名]       "  卸载插件
			" 配置python补全
				" 安装python 如：Ubuntu: sudo apt install python
				" 安装pip3   如：Ubuntu:  apt install python3-pip
				" 安装语言服务器 pip install jedi
				" coc-python       提供python语言自动补全支持
				" coc-pyls         提供python语言自动补全支持
			" 配置Java补全
				" 安装jdk或openjdk，注意jdk版本>=1.8
				" 安装插件： :CocInstall coc-java         " 进入一个Java文件，下面会有下载jdt的提示，等待下载完成即可使用
			" 配置 javaScript/typescript补全
			    "  需要安装语言服务器 npm install typescript
				" 安装插件： :CocInstall coc-tsserver    
			" 配置golang补全
				" 安装golang 如：Ubuntu: sudo apt install golang  Archlinux: sudo pacman -S golang
				" 安装插件:      :CocInstall coc-go
			" 配置html补全
				"  :CocInstall coc-html
			" 配置css补全
				" :CocInstall coc-css
			" 配置json补全
				" :CocInstall coc-json
			" 现有的非 LSP 插件
				" coc-emmet        提供 emmet 自动补全支持。
				" coc-highlight    提供当前单词以及颜色高亮支持。
				" coc-lists        提供常用列表支持。
				" coc-pairs        提供自动配对支持。
				" coc-snippets     提供代码块方案。
				" coc-yank         提供 yank 高亮和历史列表。
				" coc-git          提供 git chunks、状态、列表等支持。
				" coc-pairs        提供自动补全括号
				" coc-markdownlint 提供 markdown补全
				
			" lightline
			let g:lightline = {
			  \ 'active': {
			  \   'left': [
			  \     [ 'mode', 'paste' ],
			  \     [ 'ctrlpmark', 'git', 'diagnostic', 'cocstatus', 'filename', 'method' ]
			  \   ],
			  \   'right':[
			  \     [ 'filetype', 'fileencoding', 'lineinfo', 'percent' ],
			  \     [ 'blame' ]
			  \   ],
			  \ },
			  \ 'component_function': {
			  \   'blame': 'LightlineGitBlame',
			  \ }
			\ }

			function! LightlineGitBlame() abort
			  let blame = get(b:, 'coc_git_blame', '')
			  " return blame
			  return winwidth(0) > 120 ? blame : ''
			endfunction
			
			
			" navigate chunks of current buffer
			nmap [g <Plug>(coc-git-prevchunk)
			nmap ]g <Plug>(coc-git-nextchunk)
			" show chunk diff at current position
			nmap gs <Plug>(coc-git-chunkinfo)
			" show commit contains current position
			nmap gc <Plug>(coc-git-commit)
			" create text object for git chunks
			omap ig <Plug>(coc-git-chunk-inner)
			xmap ig <Plug>(coc-git-chunk-inner)
			omap ag <Plug>(coc-git-chunk-outer)
			xmap ag <Plug>(coc-git-chunk-outer)	
			
			set statusline^=%{get(g:,'coc_git_status','')}%{get(b:,'coc_git_status','')}%{get(b:,'coc_git_blame','')}
			
			" Commands
			" Use command :CocCommand to open commands and type git. to get all git related commands.

			" :CocCommand git.copyUrl Copy url of current line to clipboard
			" :CocCommand git.chunkInfo Show chunk info under cursor.
			" :CocCommand git.chunkUndo Undo current chunk.
			" :CocCommand git.chunkStage Stage current chunk.
			" :CocCommand git.diffCached Show cached diff in preview window.
			" :CocCommand git.showCommit Show commit of current chunk.
			" :CocCommand git.browserOpen Open current line in browser
			" :CocCommand git.foldUnchanged Fold unchanged lines of current buffer.
			" :CocCommand git.toggleGutters Toggle git gutters in sign column.
			" :CocCommand git.push push code of current branch to remote.
			
			
	" > 参考资料
		" + [Vim的新一代补全插件：coc.nvim](https://segmentfault.com/a/1190000017785227?utm_source=tag-newest)
		" + [windows下Yarn安装与使用](https://blog.csdn.net/w345731923/article/details/82878525)
		" + [coc.nvim 插件体系 - 介绍](https://zhuanlan.zhihu.com/p/65524706)
		" + [vim自动补全插件coc.nvim安装](https://www.jianshu.com/p/55cf1fa7a467)
		" + [yarn报错error An unexpected error occurred: "https://registry.yarnpkg.com...connect ETIMEDOUT...](https://blog.csdn.net/fhjdzkp/article/details/104399794)
		" + [yarn install 安装报错问题](https://www.cnblogs.com/ostrich-sunshine/p/9582766.html)
		" + [coc-todolist: nvim/vim 的 todolist/task 管理插件](https://zhuanlan.zhihu.com/p/74869916)
		" + [coc-nvim基本配置](https://blog.csdn.net/weixin_45248543/article/details/107599112?utm_medium=distribute.pc_relevant.none-task-blog-title-8&spm=1001.2101.3001.4242)


" -----------------------------------------------------------------------------
" 查询菜单 插件  kywind3000/vim-quickui
	" 配置
		" 清除所有菜单
		call quickui#menu#reset()

		" 安装一个“文件”菜单，用[text，command]来表示一个项目。
		call quickui#menu#install('&File', [
					\ [ "&New File\t:new", ':new' ],
					\ [ "&Startify", ':Startify' ],
					\ [ "&Open File\t:Explore", ':Explore' ],
					\ [ "&Close", ':q' ],
					\ [ "--", '' ],
					\ [ "&Save\t:w", ':w'],
					\ [ "Save All", ':wa' ],
					\ [ "--", '' ],
					\ [ "E&xit\tAlt+x", ':qa!' ],
					\ ])

		" 包含提示的项目，提示将显示在cmdline中
		call quickui#menu#install('&Edit', [
					\ [ '&Copy', 'let @+=@"', '将寄存器内容复制到系统剪贴板寄存器中' ],
					\ [ '&Paste', 'i @+', '粘贴' ],
					\ [ '&Find', ':FZF', '查找' ],
					\ ])

		" script inside %{...} will be evaluated and expanded in the string
		call quickui#menu#install("&Option", [
					\ ['Set &Spell %{&spell? "Off":"On"}', 'set spell!'],
					\ ['Set &Cursor Line %{&cursorline? "Off":"On"}', 'set cursorline!'],
					\ ['Set &Paste %{&paste? "Off":"On"}', 'set paste!'],
					\ ])

		" 注册帮助菜单宽度为 1000
		call quickui#menu#install('H&elp', [
					\ ["&Cheatsheet", 'help index', ''],
					\ ['T&ips', 'help tips', ''],
					\ ['--',''],
					\ ["&Tutorial", 'help tutor', ''],
					\ ['&Quick Reference', 'help quickref', ''],
					\ ['&Summary', 'help summary', ''],
					\ ], 10000)

		" 启用以在命令行中显示提示
		let g:quickui_show_tip = 1

		" 按两次空格键打开菜单
		noremap <space><space> :call quickui#menu#open()<cr>	
		
		" 如果第4个参数filetypes是以逗号分隔的列表形式提供的，则仅当当前文件类型可以在列表中匹配时，菜单才会显示。
		
		" 只有当前缓冲区的文件类型是C或CPP时，此C/C++菜单才可见。
		" call quickui#menu#install('&C/C++', [
		" 			\ [ '&Compile', 'echo 1' ],
		" 			\ [ '&Run', 'echo 2' ],
		" 			\ ], '<auto>', 'c,cpp')
		
	" 列表框
		" 当你有成百上千的东西要处理时，菜单不足以容纳它们。那么你需要一个列表框。
		
		" 按三次空格键打开菜单
		"noremap <space>L :call quickui#listbox#open(content, opts)<cr>	
		"let content = [
        "    \ [ 'echo 1', 'echo 100' ],
        "    \ [ 'echo 2', 'echo 200' ],
        "    \ [ 'echo 3', 'echo 300' ],
        "    \ [ 'echo 4' ],
        "    \ [ 'echo 5', 'echo 500' ],
        "    \]
		"let opts = {'title': 'select one'}
		"call quickui#listbox#open(content, opts)
		"let linelist = [
        "    \ "line &1",
        "    \ "line &2",
        "    \ "line &3",
        "    \ ]
			
		"" 还原上一个列表框中的最后一个位置
		" let opts = {'index':g:quickui#listbox#cursor, 'title': 'select'}
		" echo quickui#listbox#inputlist(linelist, opts)

	" 缓冲开关
		" 有一个使用listbox的内置缓冲区切换器，通过以下方式打开它：
		noremap <space>b :call quickui#tools#list_buffer('e')<cr>
		noremap <space>B :call quickui#tools#list_buffer('tabedit')<cr>
		" 然后hjkl导航，输入/space切换缓冲区，按ESC/CTRL+[退出：
		
	" 使用说明
		" h/CTRL+h/LEFT：向左移动。
		" l/CTRL+l/RIGHT：向右移动。
		" j/CTRL+j/DOWN：下移。
		" k/CTRL+k/UP：上移。
		" 空格/回车：确认。
		" ESC/CTRL+[：取消。
		" H： 移到最左边的菜单。
		" L： 移到最右边的菜单。
		" J： 移到最后一项。
		" K： 移到第一项。
		" 注意：用户热键可能会过高估计hjkl，因此可以随时使用CTRL+hjkl或箭头键。		
		
		" 双击打开 菜单栏	

		
	" > 参考资料
		" + []()

" -----------------------------------------------------------------------------
" 状态栏美化插件 glepnir/spaceline.vim
	" 配置
		" let g:spaceline_seperate_style= 'arrow'
		let g:spaceline_seperate_style= 'slant-cons'
		
	" > 参考资料
		" + []()
		
" -----------------------------------------------------------------------------
" 状态栏美化插件 vimoxide/vim-spaceline

" -----------------------------------------------------------------------------
" fcitx输入法在不同模式下自动切换 vim-scripts/fcitx.vim
	" 说明：
		" 在离开或重新进入插入模式时自动记录和恢复每个缓冲区各自的输入法状态，以便在普通模式下始终是英文输入模式，切换回插入模式时恢复离开前的输入法输入模式。
		" 适用于fcitx


" -----------------------------------------------------------------------------
" fcitx5输入法在不同模式下自动切换 520Matches/fcitx5.vim
	" 说明：
		" 在离开或重新进入插入模式时自动记录和恢复每个缓冲区各自的输入法状态，以便在普通模式下始终是英文输入模式，切换回插入模式时恢复离开前的输入法输入模式。
		" 适用于fcitx5

" -----------------------------------------------------------------------------
"  xxxx 插件 
	" 使用说明
	
	" 配置

	" > 参考资料
		" + []()


"===============================================================================
" 自定义函数配置

""""""""""""  自定义函数: 切换工作空间
""""""""""""  

	"function Cw(dir)
	"    execute ":cd  ".a:dir
	"endfunction

	" 使用说明：
		" 命令模式下输入 ：call Cw(prj_2) 快速切换到项目空间(前提是在配置里定义了prj_2的路径)

	" 配置例子1：
		" let g:prj_1 = "~/Desktop/tmp/prj_1" 
		" let g:prj_2 = "~/Desktop/tmp/prj_2"
		" let g:WorkDir = "~/tmp"  "相对路径写法  意为当前用户下的tmp目录
		" call Cw(WorkDir)
	" 配置例子2：
		" let g:MyWorkSpace = "C:/MyWorkSpace"
		" let g:CodeStudio = g:MyWorkSpace."/GitHub_Prj/"
		" call Cw(CodeStudio)

	"" 实际配置：
		" let g:WorkDir = "D:\MyWorkSpace"
		" call Cw(WorkDir)



""""""""""""  自定义函数: 快速输入时间
""""""""""""  

	" --实现方案一, 然后在编辑文件时，在输入模式下，输入 xdate 或 xdatetime 后按回车，便可输入以下格式的时间：
		iab xdate <c-r>=strftime("20%y.%m.%d")<cr> 
		iab xdatetime <c-r>=strftime("20%y/%m/%d %H:%M:%S")<cr> 
		iab xdatetime1 <c-r>=strftime("20%y/%m/%d %H:%M:%S %p (%A) %z")<cr> 

	" --实现方案二, linux系统的命令模式下 :r !date 

	" --实现方案三,
	" 返回当前时间
	func! GetTimeInfo()
		"return strftime('%Y-%m-%d %A %H:%M:%S')
		return strftime('%Y-%m-%d %H:%M:%S')
	endfunction

	" 插入模式按 Ctrl + D(ate) 插入当前时间
	imap <C-d> <C-r>=GetTimeInfo()<cr>

	" > 参考资料
	" + [Vim技能修炼教程(15) - 时间和日期相关函数](https://www.jianshu.com/p/172982c0a5f4)

""""""""""""  自定义函数: 获取当前目录路径
""""""""""""  

	" 将当前编辑的文件完全路径拷贝到系统剪贴板 --实现方案一
		" function GetCurFilePath()
		"     let cur_dir=getcwd()
		"     let dir_filename=cur_dir."\\"
		"     echo dir_filename.expand("%:r")."         done"
		"     call setreg('+',dir_filename)
		" endfunction

	" 将当前编辑的文件完全路径拷贝到系统剪贴板  --实现方案二
		function GetCurFilePath()
			" let cur_dir=getcwd() "
			let cur_file_path = getreg('%')
			" let dir_filename=cur_dir."\\".cur_file_name
			echom "复制当前路径[".cur_file_path."]到系统剪贴板[寄存器+]中"
			call setreg('+',cur_file_path)
		endfunction

	" 使用说明
		" 命令模式下输入 ：call GetCurFilePath() 快速获取当前路径

	" 快捷键设置
	"nnoremap <silent> <F9> : call GetCurFilePath()<cr>


""""""""""""  自定义函数:设置只有在是PHP文件时，才启用PHP补全 函数
""""""""""""  

	" 前提
		" 1、 配置步骤：首先下载PHP函数列表文件，将该文件保存在目录 /etc/vim/下:
		" 2、 设置php函数列表文件地址（前提将php_funclist.txt文件放在 ~/php_funclist.txt ）

	" 设置在针对所有文件都启用了PHP补全
	" 将函数列表文件引入补全配置中
	" set dictionary-=/etc/vim/php_funclist.txt  dictionary+=/etc/vim/php_funclist.txt
	" set dictionary-='C:/Program Files (x86)/Vim/vimfiles/php_funclist.txt'  dictionary+='C:/Program Files (x86)/Vim/vimfiles/php_funclist.txt'

	" 设置只有在是PHP文件时，才启用PHP补全
	au FileType php call PHPFuncList()

	function PHPFuncList()
		set dictionary-=~/.vim/completion_dictionary/php_funclist.txt dictionary+=~/.vim/completion_dictionary/php_funclist.txt
		set complete-=k complete+=k
	endfunction

	" 使用方法
		" 进入vim编辑的时候，按下 (control+p)或者 ，就可以出现php的自动补全。

""""""""""""  自定义函数:用其他应用打开当前文件夹
""""""""""""  

	"功能：用其他应用打开当前文件夹，同时不阻塞当前窗口。

	function OpenFolderWithAnotherApp(name)
		let path = expand("%:p:h")
		echom "当前位置：" . path
		if(has("win32") || has("win64") || has("win95") || has("win16"))
			let l:apps = {
				\"Explorer":"explorer \/select, %:p:h",
				\"PowerShell":"powershell.exe -noexit -command Set-Location -literalPath  %:p:h",
				\"Git-Gui":"C:\\Program Files\\Git\\cmd\\git-gui.exe  --working-dir %:p:h",
				\"Git-Bash":"C:\\Program Files\\Git\\git-bash.exe --cd=%:p:h",
				\}

			"C:\Program Files\Git\cmd\git-gui.exe" "--working-dir" "%1"
			"powershell.exe -noexit -command Set-Location -literalPath '%V'
			"C:\Users\CodeRooster\AppData\Local\Programs\Microsoft VS Code\Code.exe" "%V"
			"C:\Program Files\Git\git-bash.exe" "--cd=%1"

			" 执行命令用相应程序打开文件
			execute "!start "l:apps[a:name]
		else
			let l:apps = {
				\"thunar":"thunar %:p:h",
				\"uget":"uget-gtk",
				\"netease-cloud-music":"netease-cloud-music",
				\}
			" 执行命令用相应程序打开文件
			execute "silent !"  l:apps[a:name]
		endif
	endfunction
	" 快捷方式映射
	if(isWindows) 
		" map gb <ESC>:call OpenFolderWithAnotherApp("Explorer")<CR>
	endif

	" 使用说明
		" 命令模式下 输入: call OpenFolderWithAnotherApp("应用列表中的应用名") 

	" 自定命令
	if(isWindows)
		:command Explorer   :call OpenFolderWithAnotherApp("Explorer")          " 用文件管理器打开
		:command PowerShell :call OpenFolderWithAnotherApp("PowerShell")        " 在PowerShell打开
		:command Gitbash    :call OpenFolderWithAnotherApp("Git-Bash")          " 用Git-Bash打开
		:command Gitgui     :call OpenFolderWithAnotherApp("Git-Gui")           " 用Git-Gui打开
	endif

	if(isLinux)
		:command Thunar      :call OpenFolderWithAnotherApp("thunar")             " 图形文件管理器Thunar
		:command Uget        :call OpenFolderWithAnotherApp("uget")               " 打开下载软件uget
		:command Ncloudmusic :call OpenFolderWithAnotherApp("netease-cloud-music") " 打开网易云音乐
	endif

""""""""""""  自定义函数:使用系统上的软件打开当前文件
""""""""""""  

	" 功能：使用第三方软件快速打开当前文件，同时不阻塞当前窗口。
		" 例： 日志实时查看 BareTailProfessional 打开文件
		"        chrome、firefox浏览器打开预览

	function OpenFileWithAnotherApp(name)
		let file = expand("%:p")
		echom "当前文件：" . file

		if(has("win32") || has("win64") || has("win95") || has("win16"))
			let l:apps = {
				\"gvim":"gvim",
				\"Chrome":"C\:\\Program Files\ \(x86\)\\Google\\Chrome\\Application\\chrome.exe",
				\"FireFox":"C\:\\Program\ Files\\Mozilla\ Firefox\\firefox.exe",
				\"sublime_text3":"D:\\XWindowsToolSoftware\\Tool_Sublime_Text3_for_Windows\\SublimeText3\\sublime_text.exe",
				\"Notepad++":"C:\\Program\ Files\ \(x86\)\\Notepad++\\notepad++.exe",
				\"baregreppro":"D:\\XWindowsToolSoftware\\BareTailProfessional\\baregreppro.exe",
				\"baretailpro":"D:\\XWindowsToolSoftware\\BareTailProfessional\\baretailpro.exe",
				\"Typora":"C:\\Program Files\\Typora\\Typora.exe",
			\}
			" 执行命令用相应程序打开文件
			execute "!start "  l:apps[a:name] file
		else
			let l:apps = {
				\"gvim":"gvim",
				\"Chromium":"chromium",
				\"FireFox":"firefox",
				\"sublime_text3":"sublime-text",
				\"Typora":"typora",
				\}
			" 执行命令用相应程序打开文件
			execute "silent !"  l:apps[a:name] file
		endif
	endfunction

	" 命令映射
	if(isWindows)
		:command Gvim        :call OpenFileWithAnotherApp("gvim")          " 用Gvim再打开
		:command Chrome      :call OpenFileWithAnotherApp("Chrome")        " 用谷歌浏览器打开 
		:command Firefox     :call OpenFileWithAnotherApp("FireFox")       " 用火狐浏览器打开
		:command Baretail    :call OpenFileWithAnotherApp("baretailpro")   " 用日志文件实时查看软件器Baretailpro打开当前文件
		:command Baregrep    :call OpenFileWithAnotherApp("baregreppro")   " 用日志文件检索实时查看器baregreppr打开当前文件
		:command Sublime     :call OpenFileWithAnotherApp("sublime_text3") " 用sublime_text3打开当前文件
		:command Notepad     :call OpenFileWithAnotherApp("Notepad++")     " 用sublime_text3打开当前文件
		:command Typora      :call OpenFileWithAnotherApp("Typora")        " 用MarkDown编辑查看器Typora打开
	endif

	if(isLinux)
		:command Gvim        :call OpenFileWithAnotherApp("gvim")          " 用Gvim再打开
		:command Chromium    :call OpenFileWithAnotherApp("Chromium")      " 用谷歌浏览器打开 
		:command Firefox     :call OpenFileWithAnotherApp("FireFox")       " 用火狐浏览器打开
		:command Typora      :call OpenFileWithAnotherApp("Typora")        " 用MarkDown编辑查看器Typora打开
		command -nargs=? Sudow :w !sudo tee %                              " 保存时，用命令:w !sudo tee % 使用root权限保存
	endif

	" >参考资料
		" + [VIM 浏览器预览插件](https://mikecoder.cn/post/190/)
		" + [笨方法学Vimscript](https://www.kancloud.cn/kancloud/learn-vimscript-the-hard-way/49291)"


""""""""""""  自定义函数: 搜索当前光标位置的词
""""""""""""  
	" 知识点

	" 第一，多文件查找
		" vimgrep是vim自带的一个工具，类似于grep的用法就可以实现。比如要在当前目录查找word，使用如下：
		"     :vimgrep word *
		"
		" 如果想要递归查找所有下级目录里面，那么就用
		"     :vimgrep word **

	" 第二，多文件替换
		" 实际上只要如下两个命令即可（假设要将当前目录下所有扩展名为.txt/.cpp的文件中的hate替换成love）:
		" :args *.txt *.cpp
		" :argdo %s/hate/love/gc | update
		" 就可以完成啦。
		
		" 解释如下，
		" :args *.txt *.cpp
		" 这样写会扫描当前目录下的.txt 和 .cpp文件，并加入到参数列表。但是这样写只会扫描当前目录，
		"
		" 如果想要递归扫描所有下级目录的话，用
		" :args **/*.txt
		" 
		" 如果只想扫描下一级目录（即不扫描当前目录）的话，用
		" :args */*.txt
		" 而
		" :argdo %s/hate/love/gc | update
		" 是将参数列表中的所有文件的hate提换成love，并写入硬盘（如果没有|update，就不会写入，但相应的替换也会被中断）。
	
		function Search_Word()
			" 在当前光标位置抓词
			let getWord = expand("<cword>")
			" 获取当前文件目录地址
			let path = expand("%:p:h")
			" 切换到当前位置目录下，防止执行时，目录定位再别处
			execute ":cd %:p:h "              
			echom "当前目录[".path."]下递归查找关键词[ ".getWord." ]" 
			execute "vimgrep ".getWord." **"
		endfunction

		" map fw :call Search_Word()<CR>:copen<CR>
	nnoremap <Leader>fs :call Search_Word()<CR>:copen<CR>
	" nnoremap <Leader>fs :call Search_Word()<CR>


	" 最后强调一点，使用替换命令的时候，一定记得备份，因为替换是直接写入硬盘滴哦……
		
	" > 参考资料
		" + [Vim(gvim)实现多文件的查找和替换](https://www.vimer.cn/2009/10/22/vim-gvim-shi-xian-duo-wen-jian-de-cha-zhao-he-ti-huan/)
		
""""""""""""  自定义函数: 生成PlantUML
""""""""""""  
	" 依赖
		" Java
		" plantuml.jar
		"
	" 知识点
	
	function XPlantUML(format)
		let file = expand("%:p")
		echom "当前文件：" . file
		" plantuml.jar路径
		let plantumlpath = g:myPlugPath."/vim-slumlord/plantuml.jar"
		" ArchLinux
		" let plantumlpath = '/usr/share/java/plantuml/plantuml.jar'
		
		let l:formats = {
			\"png":"png",
			\"svg":"svg",
			\}

		if(g:isWindows)
			let l:apps = {
				\"Chrome":"C\:\\Program Files\ \(x86\)\\Google\\Chrome\\Application\\chrome.exe",
				\"FireFox":"C\:\\Program\ Files\\Mozilla\ Firefox\\firefox.exe",
			\}
			" 执行命令，将当前文件按PlantUML语法生成png图片
			" execute "!start  java -jar ".plantumlpath  file
			" 执行命令，将当前文件按PlantUML语法生成svg
			echom "执行命令，将当前文件".file."按PlantUML语法生成".l:formats[a:format]
			" execute "!start  java -jar ".plantumlpath." -tsvg" file
			execute "!start  java -jar ".plantumlpath." -t".l:formats[a:format] file
		endif
		if(g:isLinux)
			let l:apps = {
				\"Chromium":"chromium",
				\"FireFox":"firefox",
				\}
			" 执行命令，将当前文件按PlantUML语法生成svg
			" execute "silent ! java -jar ".plantumlpath." -tsvg" file
			echom "执行命令，将当前文件".file."按PlantUML语法生成".l:formats[a:format]
			execute "silent ! java -jar ".plantumlpath." -t".l:formats[a:format] file
		endif
	endfunction

	function XPlantUMLViewer(format,app)
		let file = expand("%:p")
		echom "当前文件：" . file
		" 获取当前文件名，不带扩展名
		let filename = expand("%:r")
		echom "当前文件名(不带扩展名)" . filename
		" 获取当前文件名，不带扩展名
		let filepath = expand("%:p:h")
		echom "当前文件路径" . filepath
		
		let l:formats = {
			\"png":"png",
			\"svg":"svg",
			\}

		if(g:isWindows)
			let l:apps = {
				\"Chrome":"C\:\\Program Files\ \(x86\)\\Google\\Chrome\\Application\\chrome.exe",
				\"FireFox":"C\:\\Program\ Files\\Mozilla\ Firefox\\firefox.exe",
			\}
			" 执行命令用相应程序打开文件
			echom "执行命令，将当前文件".filepath."\\".filename.".".l:formats[a:format]."用".l:apps[a:app]."浏览器打开"
			execute "!start "  l:apps[a:app] filepath."\\".filename.".".l:formats[a:format]
		endif
		if(g:isLinux)
			let l:apps = {
				\"Chromium":"chromium",
				\"FireFox":"firefox",
				\}
			" 执行命令用相应程序打开文件
			echom "执行命令，将当前文件".filepath."/".filename.".".l:formats[a:format]."用".l:apps[a:app]."浏览器打开"
			execute "silent !"  l:apps[a:app] filepath."/".filename.".".l:formats[a:format]
		endif
	endfunction

	" 命令映射
	if(isWindows)
		:command PlantUMLSVG   :call XPlantUML("svg")        " 生成PlantUML的SVG
		:command PlantUMLPNG   :call XPlantUML("png")        " 生成PlantUML的PNG

		:command PlantUMLSVGFireFox    :call XPlantUMLViewer("svg","FireFox")       " 查看生成PlantUML的SVG
		:command PlantUMLPNGFireFox    :call XPlantUMLViewer("png","FireFox")       " 查看生成PlantUML的PNG
		:command PlantUMLSVGChrome     :call XPlantUMLViewer("svg","Chrome")        " 查看生成PlantUML的SVG
		:command PlantUMLPNGChrome     :call XPlantUMLViewer("png","Chrome")        " 查看生成PlantUML的PNG
	endif

	if(isLinux)
		:command PlantUMLSVG    :call XPlantUML("svg")        " 生成PlantUML的SVG
		:command PlantUMLPNG    :call XPlantUML("png")        " 生成PlantUML的PNG

		:command PlantUMLPNGChromium   :call XPlantUMLViewer("png","Chromium")        " 查看生成PlantUML的PNG
		:command PlantUMLSVGChromium   :call XPlantUMLViewer("svg","Chromium")        " 查看生成PlantUML的PNG
		:command PlantUMLSVGFireFox    :call XPlantUMLViewer("svg","FireFox")         " 查看生成PlantUML的SVG
		:command PlantUMLPNGFireFox    :call XPlantUMLViewer("png","FireFox")         " 查看生成PlantUML的PNG
		" :command PlantUMLSVGChrome     :call XPlantUMLViewer("svg","Chrome")        " 查看生成PlantUML的SVG
		" :command PlantUMLPNGChrome     :call XPlantUMLViewer("png","Chrome")        " 查看生成PlantUML的PNG
	
	endif

""""""""""""  自定义函数: 控制Fctix 模式切换时切换输入法
""""""""""""  
" 实现退出插入模式时自动关闭输入法。

	" let g:input_toggle = 1
    "
	" function! Fcitx2en()
	"    let s:input_status = system("fcitx-remote")
	"    if s:input_status == 2
	"       let g:input_toggle = 1
	"       let l:a = system("fcitx-remote -c")
	"    endif
	" endfunction
    "
	" function! Fcitx2zh()
	"    let s:input_status = system("fcitx-remote")
	"    if s:input_status != 2 && g:input_toggle == 1
	"       let l:a = system("fcitx-remote -o")
	"       let g:input_toggle = 0
	"    endif
	" endfunction
    "
	" set timeoutlen=150
	" autocmd InsertLeave * call Fcitx2en()

	" 实现进入插入模式自动启用输入法。
	"autocmd InsertEnter * call Fcitx2zh() "去掉这行行的注释可以，可以实现插入模式自动启动输入法

	" > 参考资料
		" - [第 10 章 通过命令控制Fcitx](http://fcitx.github.io/handbook/chapter-remote.html)

""""""""""""  自定义函数: 执行当前文件
""""""""""""  
" 在VIM中直接执行当前的脚本。执行之后的结果（屏幕输出）会被放在VIM窗口分屏之后的左边窗口内。
	" 版本一
	function! Setup_ExecNDisplay_v1()
	  execute "w"
	  execute "silent !chmod +x %:p"
	  let n=expand('%:t')
	  execute "silent !%:p 2>&1 | tee ~/.vim/output_".n
	  " I prefer vsplit
	  "execute "split ~/.vim/output_".n
	  execute "vsplit ~/.vim/output_".n
	  execute "redraw!"
	  set autoread
	endfunction

	" 版本二：
	function! Setup_ExecNDisplay()
		" 先保存更改
		execute "w"

		" echo &filetype 获取文件类型
		let filetype= expand(&filetype)

		" 获取文件名
		let n=expand('%:t')
		echom "当前 %:t ：" . n

		" 根据文件类型 使用不同应用执行
		if filetype == 'python'
			echom "文件类型是 .py python"
		elseif filetype == 'dosbatch'
		    echom "文件类型是 .bat"
		    " execute "silent !%:p 2>&1 | tee ~/.vim/output_".n
		elseif filetype == 'sh'
		    echo "文件类型是 .sh"
			" 授权执行权限
			execute "silent !chmod +x %:p"
			" 执行
		    execute "silent !%:p 2>&1 | tee ~/.vim/output_".n
		else
			" 授权执行权限
			execute "silent !chmod +x %:p"
			echo "其他情况，直接用终端执行"
		    execute "silent !%:p 2>&1 | tee ~/.vim/output_".n
		endif
		
		" 打开执行日志文件
		"execute "split ~/.vim/output_".n
		execute "vsplit ~/.vim/output_".n
		" 执行完刷新重绘制
	  	execute "redraw!"
	  	set autoread
	endfunction

	" 命令映射
		" 按 F5 键就可以执行
		:nmap <F5> :call Setup_ExecNDisplay()<CR>

	" 其他
		" 1):!command
		"   注释：不退出vim，并执行shell命令command，将命令输出显示在vim的命令区域，不会改变当前编辑的文件的内容
		" 2):r !command
		"   注释：将shell命令command的结果插入到当前行的下一行
		" 3):起始行号,结束行号 !command
		"   注释：将起始行号和结束行号指定的范围中的内容输入到shell命令command处理，并将处理结果替换起始行号和结束行号指定的范围中的内容
		" 4):起始行号,结束行号 w !command
		"   注释：将起始行号和结束行号所指定的范围的内容作为命令command的输入。不会改变当前编辑的文件的内容
		" 5):起始行号,结束行号 w !xargs command
		" 注释：将起始行号和结束行号所指定的范围的内容作为命令command的输入的命令行参数

		" 例:
		" :!ls -l
		" :r !date，读取系统时间并插入到当前行的下一行。
		" :62,72 !sort，将62行到72行的内容进行排序
		" :62 !tr [a-z] [A-Z]，将62行的小写字母转为大写字母
		" :62 w !bash，将会把第62行的内容作为bash命令来执行并显示结果，而且不会改变当前编辑的文件的内容，若62行内容为ls -l 那么输入:62 w !bash就跟执行!ls -l是一样的效果，如果你用的shell是bash shell
		" :. w !bash，将当前行（vim中光标所在行）的内容作为bash命令来执行,

	" > 参考资料
		" - [在VIM中直接将当前文件当做脚本执行的方法](https://blog.csdn.net/SH_UANG/article/details/53440511)
		" - [vim中执行shell命令小结](https://blog.csdn.net/songsong2017/article/details/83182674)

"==============================================================================
" 命令映射
	"注：输入:command "列出所有的vim中用户自定义的命令列表
	if(isWindows)
		:command Tgbash :term C:\Program Files\Git\bin\bash.exe   " git-bash终端打开当前目录(自定义命令需要大写开头)
	endif

" 快捷键或命令
	" vim中键盘映射有三类：visual，insert和normal
	" noremap  
	" nnoremap 是用于normal模式的非递归映射
	" vnoremap 是用于visual模式的非递归映射
	
	" 前缀键设置   <Leader>键设置 前缀键默认为 " \ ” 
		" 使用:help <Leader>命令，可以查看关于前缀键的更多信息
		" >参考资料
			" + [VIM学习笔记 前缀键(leader)](https://zhuanlan.zhihu.com/p/63626180)

		" let mapleader=","            " 将前缀键定义为逗号
		" let mapleader = "\<space>"   " 将前缀键设置为空格键


	" 前缀键命令映射
	if(isWindows)
		" term终端窗口配置（vim版本需要>8.0）
		" :term C:\Program Files\Git\bin\bash.exe " 打开内置终端窗口时用git-bash 
	" 内置终端打开git-bash
		nnoremap <Leader>tgbash :term C:\Program Files\Git\bin\bash.exe<CR>    
	endif


	" 设置类快捷键  s 
		let g:which_key_map.s = { 'name' : '+设置' }
		
		nnoremap <Leader>sn :set number!<CR>
		let g:which_key_map.s.n = '显隐行号:set number!'       " 该快捷键在提示面板中的说明

		nnoremap <Leader>sl :set list!<CR>
		let g:which_key_map.s.l = '显隐特殊符号:set list!'

		nnoremap <Leader>sw :set wrap!<CR>
		let g:which_key_map.s.w = '自动换行:set wrap!'

		nnoremap <Leader>sv :source $MYVIMRC<cr>
		let g:which_key_map.s.v = '重载配置:source $MYVIMRC'


   

	" 将选中的复制到系统剪贴板
		vnoremap <Leader>y  "+y<cr>
		vnoremap <Leader>Y  "*y<cr>
		let g:which_key_map.y = ' "+y 视图/选择模式下，复制选中内容到系统剪贴板+'
		let g:which_key_map.Y = ' "*y 视图/选择模式下，复制选中内容到系统剪贴板*'
		noremap <Leader>p  "+p<cr>
		noremap <Leader>P  "*p<cr>
	" 剪贴板
	" 剪贴板  Copy to system clipboard
		vnoremap Y "*y
		" 视图模式下，复制选中的内容到系统剪贴板寄存器*中
		
		vnoremap y "+y
		" 视图模式下，复制选中的内容到系统剪贴板寄存器+中
	
		" vnoremap P "*p
		" 视图模式下，粘贴剪贴板寄存器*中的内容
		" vnoremap p "+p
		" 视图模式下，粘贴剪贴板寄存器+中的内容

	" 保存与退出
	
		" noremap <C-q> :q<CR> " 冲突
		" 插入模式下 大写q    退出当前窗口
		
		" noremap <C-q> :qa<CR>    
		" 插入模式下 Ctrl+q   全部退出
		
		" noremap <C-s> :w<CR> " 冲突
		" 插入模式下 Ctrl+s   进行保存
		
		 :command W :w   " 使用大写的 :W 保存  
		 :command Q :q   " 使用大写的 :Q 退出

	" 文件操作 f
		let g:which_key_map.F = { 'name' : '+文件' }
		nnoremap <silent> <Leader>Fw :w<CR>
		let g:which_key_map.F.w = '保存文件:w'     " 该快捷键在提示面板中的说明
		if(isWindows)
				nnoremap <silent> <Leader>Fm :Explorer<CR>
				let g:which_key_map.F.m = '打开文件管理器:Explorer' " 该快捷键在提示面板中的说明
		endif
		if(isLinux)
				nnoremap <silent> <Leader>Fm :Ranger<CR>
				let g:which_key_map.F.m = '打开文件管理器:Ranger' " 该快捷键在提示面板中的说明
		endif

		nnoremap <silent> <Leader>Fq :copen<CR>
		nnoremap <silent> <Leader>Fl :lopen<CR>
		nnoremap <silent> <Leader>Fn :NERDTreeToggle<CR>
		nnoremap <silent> <Leader>Fu :UndotreeToggle<CR>
		nnoremap <silent> <Leader>Ft :TaslistToggle<CR>
		nnoremap <silent> <Leader>FT :TlistToggle<CR>
		nnoremap <silent> <Leader>Fb :TagbarToggle<CR>
		let g:which_key_map.F.q ='打开查询结果quickfix窗口:copen'
		let g:which_key_map.F.l ='打开location查询窗口:lopen'
		let g:which_key_map.F.n ='打开NEDTree目录树:NERDTreeToggle'
		let g:which_key_map.F.u ='打开Undotree撤销树:UndotreeToggle'
		let g:which_key_map.F.t ='打开TaskList任务树:TaslistToggle'
		let g:which_key_map.F.T ='打开TlistToggle函数变量树:TlistToggle'
		let g:which_key_map.F.b ='打开TagbarToggle函数变量树:TagbarToggle'
		
		let g:which_key_map.F.s ='递归查找当前光标的词:call Search_Word()<CR>:copen<CR>'

	" 打开类操作  o
		nnoremap <silent> <leader>oq  :copen<CR>
		nnoremap <silent> <leader>ol  :lopen<CR>
		nnoremap <silent> <Leader>on  :NERDTreeToggle<CR>
		nnoremap <silent> <Leader>ou  :UndotreeToggle<CR>
		nnoremap <silent> <Leader>ot  :TaslistToggle<CR>
		nnoremap <silent> <Leader>oT  :TlistToggle<CR>
		nnoremap <silent> <Leader>ob  :TagbarToggle<CR>

		let g:which_key_map.o = {
				\ 'name' : '+Open',
				\ 'q' : '打开查询结果quickfix窗口:copen',
				\ 'l' : '打开location查询窗口:lopen',
				\ 'n' : '打开NEDTree目录树:NERDTreeToggle',
				\ 'u' : '打开Undotree撤销树:UndotreeToggle',
				\ 't' : '打开TaskList任务树:TaslistToggle',
				\ 'T' : '打开TlistToggle函数变量树:TlistToggle',
				\ 'b' : '打开TagbarToggle函数变量树:TagbarToggle',
				\ }

		if(isWindows)
				nnoremap <silent> <Leader>og  :Gitgui<CR>
				let g:which_key_map.o.g = '打开文件管理器:Gitgui' " 该快捷键在提示面板中的说明
		endif

		if(isLinux)
			if(isNeovim)
				nnoremap <silent> <Leader>og  :FloatermNew lazygit<CR>
				let g:which_key_map.o.g = '打开git管理器:FloatermNew lazygit'
			else
				nnoremap <silent> <Leader>og  :!lazygit<CR>
				let g:which_key_map.o.g = '打开git管理器:!lazygit' 
			endif
		endif
	" 对比模式下操作 d
		nnoremap <silent> <Leader>dp  :diffput<CR>
		nnoremap <silent> <Leader>do  :diffget<CR>
		nnoremap <silent> <Leader>dt  :diffthis<CR>
		let g:which_key_map.d = {
				\ 'name' : '+对比操作',
				\ 't' : '选择当前切分的窗口进入对比（需要两个文件水平或垂直）:diffthis',
				\ 'p' : '将光标所在差异点应用到另一文档 gp或:diffput',
				\ 'o' : '将光标所在差异点拷贝到当前文档 go或:diffget',
				\ }

	" Git应用或操作 g

		" let g:which_key_map.g = { 'name' : '+Git' }
		let g:which_key_map.g = {
				\ 'name' : '+Git',
				\ 'l' : 'Git日志:Glog',
				\ 's' : 'Git状态:Gstatus',
				\ 'd' : 'Git水平对比:Gdiff',
				\ 'v' : 'Git垂直对比:vertical Gdiff',
				\ 'w' : 'Git增加本文件修改:Gwrite',
				\ 'c' : 'Git提交:Gcommit -m""',
				\ 'b' : 'Git修改:Gblame',
				\ 'P' : 'Git推送:Gpush',
				\ 'p' : 'Git拉取:Gpull',
				\ }
		if(isWindows)
			nnoremap <silent> <Leader>gu  :Gitbash<CR>
			let g:which_key_map.g.u = '打开git管理器:Gitbash' " 该快捷键在提示面板中的说明
		endif
		if(isLinux)
			if(isNeovim)
				nnoremap <silent> <Leader>gu :FloatermNew lazygit<CR>
				let g:which_key_map.g.u = '打开git管理器:FloatermNew lazygit'
			else
				nnoremap <silent> <Leader>gu :!lazygit<CR>
				let g:which_key_map.g.u = '打开git管理器:!lazygit'
			endif
			"" 窗口打开第三方软件 
			" Open up lazygit(需要安装lazygit)
			" noremap \g :term lazygit<CR>
			" nnoremap <Leader>g :term lazygit<CR>
			" noremap <c-g> :tabe<CR>:-tabmove<CR>:term lazygit<CR>
		endif
	" 窗口操作快捷键 w
		let g:which_key_map['w'] = {
			\ 'name' : '+窗操作' ,
			\ 'w' : ['<C-W>w'     , '移到另一窗口<C-W>w'],
			\ 'd' : ['<C-W>c'     , '关闭窗口<C-W>c'],
			\ 'h' : ['<C-W>h'     , '移到左方窗口<C-W>h'],
			\ 'j' : ['<C-W>j'     , '移到下方窗口<C-W>j'],
			\ 'l' : ['<C-W>l'     , '移到右方窗口<C-W>l'],
			\ 'k' : ['<C-W>k'     , '移到上方窗口<C-W>k'],
			\ 'H' : ['<C-W>5<'    , '窗口垂直减5列<C-W>5< 或 vertical resize -5'],
			\ 'J' : ['resize +5'  , '窗口水平扩5行resize +5'],
			\ 'L' : ['<C-W>5>'    , '窗口向右扩5列<C-W>5> 或 vertical resize +5'],
			\ 'K' : ['resize -5'  , '窗口水平减5行:resize -5'],
			\ '=' : ['<C-W>='     , '均衡窗口<C-W>='],
			\ 's' : ['<C-W>s'     , '窗口水平切分<C-W>s'],
			\ 'v' : ['<C-W>v'     , '窗口垂直切分<C-W>v'],
			\ '?' : ['Windows'    , 'fzf窗口检索切换:Windows'],
			\ }

	" 空格打开关闭折叠
		" nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>

	nnoremap <Leader>.  :cd %:p:h<cr>
	let g:which_key_map.s.w = '切换到当前目录:cd %:p:h'

	" Buffer操作 b
		let g:which_key_map.b= { 'name' : '+缓冲区操作' }
	
		nnoremap <Leader>bp :bp<cr> 
		let g:which_key_map.b.p = '切换下上一个缓冲:bp'
	
		nnoremap <Leader>bn :bn<cr>
		let g:which_key_map.b.n = '切换到下一个缓冲:bn'
		noremap <Leader><Tab> :bn<CR>
		noremap <S-Tab> :bp<CR>

		nnoremap <Leader>bd :bd<cr>
		let g:which_key_map.b.d = '删除当前缓冲文件:bd'

" 配置快捷键
		let g:which_key_map.m= { 'name' : '+MarkDown表格和应用面版' }
		nnoremap <Leader>mt :TableModeToggle<cr>
		let g:which_key_map.m.t = '开启/关闭markdowm表格模式:TableModeToggle'
		" nnoremap <Leader>md :TableModeDisable<cr>
		" let g:which_key_map.m.d = '开启markdowm表格模式:TableModeDisable'

		let g:which_key_map.r= { 'name' : '+执行 选中项、行、当前文件' }
		let g:which_key_map.r.l = '将当前行的内容作为bash命令来执行'
		nnoremap <Leader>rl :.w !bash<cr>           " 将当前行的内容作为bash命令来执行
		let g:which_key_map.r.f = '执行文件'
		nnoremap <Leader>rf :call Setup_ExecNDisplay()<cr>
		" let g:which_key_map.m.d = '开启markdowm表格模式:TableModeDisable'

" 按键映射
	" Esc 按键映射
	" 默认切换的命令模式 Esc 插入模式下 Ctrl+{ 、Ctrl+o
	imap kj <esc>  
	" 映射插入模式下的 kj 键为 ESC 键
	" (注意：是kj而非jk，其间的区别多按几下自能体会) 

	" inoremap jk <esc>
	" 映射插入模式下的 jk 键为 ESC 键
	
	inoremap vv <esc> 
	" 映射插入模式下的 vv 键为 ESC 键

	" 作用就是在编辑状态下，按ctrl+u，将刚刚输入的那个单词变成大写。
	inoremap <C-u> <esc>gUiwea

" 字体
	" Linux/Unix系操作系统和Windows操作系统对于字体大小的命令格式也有一些差异：
	"     Linux/Unix命令格式：set guifont=字体 +\\+空格 + 字体大小
	"     Windows/Mac命令格式：set guifont=字体 + : + 字体大小
	" 相同的是，两个系统对空格都需要使用反斜杠\\进行转意。
	" 不同的是，关于字体大小的表述。Linux/Unix字体大小直接写字号，Windows/Mac字号需要加上h的高度名。
	
	" 设置方法
	" 	临时修改。通过gvim Command MODE，输入如下命令即可：
	" 	Linux/Unix: set guifont=Monospace\空格14 注意这里需要对空格使用\进行转意
	" 	Windows: set guifont=Monospace:h14 注意这里的字体大小需要有h的标识
		
	" 	临时修改。通过GUI选择字体和大小（更直观），通过gvim Command MODE，输入如下命令即可：
	" 	Windows或Linux/Unix：set guifont=*
	" 	上述命令输入完毕后，GVIM将会弹出一个对话框，提示选择字体和大小，点击确认即可完成设置。

	if(isWindows)
		" set guifont=Powerline\ Consolass:h12:cANSI     " (Windows系统默认没有安装该字体需要自己下载安装 该字体似乎未支持文件图标)
		" set guifont=仿宋:h12
		" set guifont=黑体:h12
		" set guifont=楷体:h12
		" set guifont=隶书:h12
		" set guifont=新宋体:h12
		" set guifont=幼圆:h12
		" set guifont=Lucida\ Console:h12
		" set guifont=Lucida\ Sans\ Typewriter:h12
		" set guifont=Droid\ Sans\ Mono\ Nerd\ Font\ Complete\ Mono:h12
		" set guifont=set guifont=DejaVu\ Sans\ Mono:h12
		" set guifont=DroidSansMono\ Nerd\ Font:h12
		" set guifont=DroidSansMono\ Nerd\ Font\ Mono:h12
		set guifont=DroidSansMono\ NF:h11
	endif
	if(isLinux)
		set guifont=DroidSansMono\ Nerd\ Font\ Mono  " (系统默认没有安装该字体需要自己下载安装)
	endif
	
"===============================================================================

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""
"" 主题风格设置
""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 主题设置文件放在vim安装目录下 如：C:\Program Files (x86)\Vim\vimfiles\colors
	" 主题下载地址一：vivify(http://bytefluent.com/vivify)

	" 初始化时，优先使用molokai.vim,若不存在则根据时间选用白天主题和黑夜主题
	" if executable("molokai.vim")  " 注： 如果新版的gvim8.2 color w文件放在~/vimfile中这种写法检查不到该文件
	"    color molokai
	" else
	"        let hourvalue = strftime("%H")
	"        "echo  "提示:当前时间为：" hourvalue

	"        if hourvalue < 6
	"            "echo "提示:00:00点~06:00 ，设为夜间模式主题"
	"            color evening
	"        elseif hourvalue < 18
	"            "echo "提示: 0:00点~18:00 设为白日模式主题"
	"            color morning
	"        elseif hourvalue < 24
	"            "echo "提示:18:00点~24:00 ，设为夜间模式主题"
	"            color evening
	"        else
	"            echo "提示:其他情况，设为模式主题"
	"            color blue
	"        end
	"    else
	"        " echo "提示：不存在strftime 直接选择用黑夜模式"
	"        color blue
	"    endif
	" endif
	" if(isInstallPlug)
		color molokai     " 主题色 黑
		" color inkstained  " 主题色 白色

		" colorscheme typewriter
		" color gocode                     " 主题色 黑白
		" color elmindreda                 " 主题色 蓝字
		" color phosphor                   " 主题色 绿字
	" endif
	
	" term 黑白终端; cterm 彩色终端; gui ,gvim窗口
	" set cursorline "  开启高亮光标行
	" hi CursorColumn cterm=NONE ctermbg=green ctermfg=yellow guibg=darkred guifg=red

	" set cursorcolumn " 开启高亮光标列
	" hi CursorColumn cterm=NONE ctermbg=darkred ctermfg=green guibg=darkred guifg=red
	
	" let &t_SI = "\<Esc>]50;CursorShape=0\x7"
	" let &t_EI = "\<Esc>]50;CursorShape=1\x7"
	

"-------------------------------------------------------------------------------
"                   ................... ..............                . ..      
"                   ......,/ooO,OOOoOOOOOOOO\]]]]]]..... .            . ..      
"                ......OoOOOoO\ooOOOoOOOOOOOOOOOOO,oO\.........       . ..      
"               ....]/oOOOOOOOOOoOOOOOOOOOOOOOOOOOOOO/OOO]..... ..    . ..      
"               ../OOoOoOOOOOO[[[[[[...,[oOOO@@OOOOOOOOOOOO\......    . ..      
"             .....\oOOOOO/................./@@...[OoOOOOOOoOo\...    . ..      
"         .........=OOo/..  ...     ... ..,@/@@......[OOOOOOOOoO`...... ..      
"         ..,o./O/\O[[.........  ..    ...[.=@@........,\OOOOOOoo`..... ..      
"     .....=OOoOOOO/..,]]]/@]]`..... ......,@@@...    .....oOOOOooO.......      
"     ....=OOOo\oO^.,\@@@@@@@@@[........./@@/@@...     .....,OOOOOOO`.. ..      
"     ...,OOOOOO/......=@@@@@/........./@@`..@@...        ...,OOOOOOO^....      
"     ..,]OOOOOO^.......\@@@@.........@@`....@@...        ....,OOOOOOOo...      
"     ../oOOoO//.........\@@.........@@......@@........       ..\OOOOOO`..      
"     .\ooOoo\^.......@`..@^../`.....\@......@@.......     ......\OOOOOO..      
"     .OOOOO\O^... ....\\.@*,@`...,@^,@^....=@@@@@@\.....     ....oOOOOO..      
"     .`OOOOOO^.... ....\\@/@..,@@@\@@@@@@@@@@@@]]]=@... .    ....=OOOOO\.      
"     .=OOoOOO`..........,@/....,\@\..=@....=@^...,[@@....    . ..=OOOOO..      
"     .OOOoOOO... ........@^.......,..@/....=@@@@@@/`\^...    .....,OoOOO.      
"     .=OooOOO......=\....@`...@`....=@......@^......\@...      ...^.ooO^.      
"     ..\oOOOO^.......@...@.../^.....@`......@@.....,@^...      ..,OOOOO/.      
"     ..oOoOoo^.......@@..@..=@^.....@......=@^...,@@@^...    ....=OoOOo/.      
"     ..OoOOOOO`.. ...=@..@`..@^.....,@`....=@^....,@@^...    ...=OOOoOO`.      
"      .,OOOOOOO.. ...=@@/\@\\@.... ...\@`..=@^.....@@^...    ...OOOoOO`..      
"     ...oOOOOOO\.. ...,@@]@@@.... ......\@`,@^.....=@@...  ..../oOOOO^...      
"     ....\OOoOOO\................    ....,@^@^......,@\......,OOoOOO/. ..      
"     . ....,[OOOoO`......   . .        ...,@@^........,@`.../OOOooOO.. ..      
"         ...,\OOoOo\`...... .         . ...=@^...  .....,@\OOOOOOO`... ..      
"          ...,[OOoOOOOO`.......       . ..,@@....  ...../OOOoOoOO^.... ..      
"           .....[oOO\OOOOOO`...............`......../OOoOOOOOOO/...  . ..      
"             .....\\]oOOOoOoOoO`....... ......,]/OOOOOoOOoOOO[`..    . ..      
"                 .....,OoOoOOOOOOooOO/OOOOOOOoOOoOOOOOOOOO`.....      ...      
"                 . .....,OOOOOOOOOOOOOOoOOOOOOooOOOOOO/........       ...      
"                       ... ..,[\OOOOOo`\OOOOOOOOO,/......................      
"                           ... .........[..,[............................      
"===============================================================================
